最近在处理文本字符串时,没一行数据都是按照逗号分割的,每个字段值一般情况是带有双引号的,但是有的字段值里面还包含逗号,甚至有的字段就没有双引号,这个分割起来就有点麻烦了
下面说一下我解决方法,如果谁有更好的方法,欢迎加入讨论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& ...
随机推荐
-
类型转换器(InitBinder 初始化绑定器)
单日期格式 导入jar包 创建FirstController.java @Controller public class FirstController { /** * @param binder * ...
-
NOIP2009分数线划定【B004】
[B004]分数线划定[难度B]—————————————————————————————————————————————————————————————————————————— [题目要求] 世博 ...
-
H3C qos 简单配置
qos 有三种服务模型 Best-Effort service(尽力而为服务模型) Integrated service(综合服务模型,简称Int-Serv) Differentiated servi ...
-
Objective-c 动画
想提高下以后做的应用给客户带去的体验,所以看了几天OC的CAAnimation动画类,也做了几个小案例,下面讲个别案例来做为本文的主要内容. 一:继承结构截图 上面截图中用得最多的类大概就是,CABa ...
-
仿jQuery的siblings效果的js原生代码
仿jQuery的siblings效果的js原生代码 <previousSibling> 属性返回选定节点的上一个同级节点(在相同树层级中的前一个节点). <nextSibling&g ...
-
【NOIP2015】推销员
推(chuan)销员 分析 这里主要阐述一下我的分析思路. 看起来挺直观的. 最初的想法,我们枚举每一个最远点mxp的位置,然后对之前的a进行排序. 那么以mxp为最远点,选x个的最大疲劳值为: 这样 ...
-
HttpWebRequest与HttpWebResponse使用例子(转)
转自:http://www.jb51.net/article/28401.htm 在每个系统出写入报告错误代码(找个合理的理由,比如系统免费升级) -> 自家服务器接收并处理错误报告 -> ...
-
i标签和em标签的区别
很多人以为i标签和em标签都只是HTML用于斜体的标签,并不知道他们有什么区别. 其实对于熟悉SEO的人来说,他们的区别挺大的(普通用户略过). i标签的作用:仅仅是为了让字体显示斜体,对于SEO没什 ...
-
hadoop2.4.1伪分布式搭建
1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip ...
-
lodash中_.set的用法
_.set(object, path, value) # Ⓢ Ⓣ Ⓝ 设置对象的路径上的属性值.如果路径不存在,则创建它. 参数 1.object (Object): 待扩大的对象. 2.path ( ...