逗号分割符--字段中含逗号等情况的解析方法Java实现
最近在处理文本字符串时,没一行数据都是按照逗号分割的,每个字段值一般情况是带有双引号的,但是有的字段值里面还包含逗号,甚至有的字段就没有双引号,这个分割起来就有点麻烦了
下面说一下我解决方法,如果谁有更好的方法,欢迎加入讨论O(∩_∩)O~
/**
* Java字符串逗号分割解析方法
* 本专门针对双引号中还有逗号或者某个字段无双引号的情况而设计的
* 例如要将字符串String sss="101,\"a\",\"中国,江苏\",\"b\",\"中国,北京\",1,0,\"c\""按照逗号进行分割解析
* 正确的split的结果是 (101)(a)( 中国,江苏) ( b)( 中国,北京) ( 1)( 0)( c)
* 如果用java的split方法的话,当遇到(中国,北京)这些字段值时就会多分割了一个字段出来,就不正确了
* 同时,上面的101 ,1,0都不带要双引号,我们期望的理想字符串当然都是带双引号的字段值组成的字符串了
* 但是发生上面的情况时我们感觉很恼火,以上就是本方法设计的初衷,其实这方法是大学课本数据结构中的提到的,
* 在此用Java实现了一下,但是方法执行的效率我还没有测试
* @author HsuChan
* @version 2014-11-30 22:30
* @param sss
* @return String []
*/
public String [] commaDivider(String sss){
//双引号开始标记
int qutationStart =0;
//双引号结束标记
int qutationEnd =0;
char[] charStr = sss.toCharArray();
//用于拼接字符 作为一个字段值
StringBuffer sbf = new StringBuffer();
//结果list
List<String> list = new ArrayList<String>();
//逐个字符处理
for(int i=0;i<charStr.length;i++) {
//在此之前还未遇到双引号并且当前的字符为\"
if(qutationStart == 0&&charStr[i] == '\"') { qutationStart = 1;
qutationEnd = 0;
continue;
} else if(qutationStart == 1&&charStr[i] == '\"'){
//在此之前遇到了双引号并且当前的字符为\" 说明字段拼接该结束了
qutationStart = 0;
qutationEnd = 1;
//当最后一个字符是双引号时,由于下次循环不会执行,所以在此保存一下
if(i == charStr.length-1&&sbf.length() != 0) {
list.add(sbf.toString());
sbf.setLength(0);
}
continue;
} else if(qutationStart == 1&&charStr[i] == ','&&qutationEnd == 0) {
//处理 \"中国,北京\"这种不规范的字符串
sbf.append(charStr[i]);
continue;
} else if(charStr[i] == ',') {
//字段结束,将拼接好的字段值存到list中
list.add(sbf.toString());
sbf.setLength(0);
continue;
}
//不属于分隔符的就拼接
sbf.append(charStr[i]);
if(i == charStr.length-1&&sbf.length()!=0) {
list.add(sbf.toString());
sbf.setLength(0);
} } return (String[])list.toArray(new String[list.size()]);
}
本文属100% 原创,如有分享请注明出处,谢谢。
逗号分割符--字段中含逗号等情况的解析方法Java实现的更多相关文章
- 在MySQL字段中使用逗号分隔符
大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性. 被分割的字段一定是有限而且数量较少的,我们不可能在一个 ...
- 如何将字段中带逗号的SQLite数据库数据导入到MySQL
以前在数据库导入中没有遇到过什么问题,如下这样导入 load data local infile 'D:\data.csv' into table table1 fields terminated b ...
- sql like in 语句获取以逗号分割的字段内的数据
From:http://www.cnblogs.com/goody9807/archive/2011/07/27/2118107.html sql中的某个字段用“,”分隔数据,需要获取数据的时候直接把 ...
- JS-为金额添加千分位逗号分割符
前言:这个功能在前端页面中使用的还是比较多的,正好我们的项目中也有使用此功能,不过YY同学写的代码不像个方法的样子,一个入口中间又插了几道子,所 以,我写了下面这个方法,经过测 ...
- js 去掉以逗号分割的字符串中头尾和中间多余的逗号
let permission = ",,,106,105,108,,,109,110,107,,101,,," let permission = "106,105,108 ...
- mongodb查询数据库中某个字段中的值包含某个字符串的方法
正则表达式最能解决: 例如: db.getCollection(.*$/}) 这里主要是注意正则表达式要写对,该转义的注意转义,否则报错.
- 黄聪:wordpress向mysql字段中保存html代码(使用add_option()方法),然后无法显示出问题
你可以把" 引号去掉了再进库,或者使用 stripslashes_deep() <?php $str = "Is your name O\'reilly?"; // ...
- iOS开发中XML的DOM和SAX解析方法
一.介绍 dom是w3c指定的一套规范标准,核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的“树”,这树各节点和xml各标记对应,通过操纵此“树”来处理xml中的文 ...
- jquery中如何以逗号分割字符串_百度知道
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
随机推荐
- XSS攻击测试代码
'><script>alert(document.cookie)</script>='><script>alert(document.cookie)&l ...
- easyUi load方法重新加载表单的数据
1.表单回显数据的方法 <script> //方法一 function loadLocal(){ $('#ff').form('load',{ name:'myname', email:' ...
- windows下pip安装python模块时报错总结
http://www.cnblogs.com/liaojiafa/p/5100550.html 前言: 这几天把python版本升级后,发现pip安装模块好多都报错(暂不确定是不是因为升级导致的),我 ...
- Debian 8安装中文字体
1.使用的镜像是debian-8.3.0-amd64-kde-CD-1.iso,下载链接可在Debian网站找到,系统安装完成后中文显示为方框 2.安装字体 apt-get install xfont ...
- kindeditor在光标处插入编辑器外的数据
页面 <div class="form-group clearfix"> <label class="control-label col-sm-3 co ...
- Bash 里的转义序列
在 Bash 里,一共有五个地方支持反斜杠开头的转义序列,包括两个内部命令 echo 和 printf 的参数里,字符串语法 $'...' 里,还有四个提示符变量 PS1-PS4 里,以及在 Read ...
- DbHelper为什么要用Using?
我们分析一下DbHelper做什么事情,大家都知道它用于数据库的连接操作,这里的数据库连接会创建非托管资源,c#的垃圾回收机制不会对它处理,需要实现IDisposable接口手动释放. 手动释放的 ...
- 64位操作系统 通过ODP.NET 访问ORACLE 11g
摘要:64位操作系统部署.NET 程序访问oracle时,无法连接问题.(注意:客户端是64位系统 ,服务端是否64位 还是32位无关.) 1.到oracle 官网搜索相关版本的 ODAC网址: ht ...
- 命令行环境下简单实用的工具——重定向&管道
如果你对管道和重定向应用自如了,无需继续往下看.本文虽然以windows上cmd命令行环境演示,但同样适用于Unix/Linux等平台. 引言 关于管道和重定向,最初是在刘汝佳的<算法竞赛入门经 ...
- .NET LINQ 数据排序
数据排序 排序操作按一个或多个特性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. 通过指定第二个排序条件,可以对各个主要排序组中的元素进行排序. 方法 方法名 说明 C# 查 ...