逗号分割符--字段中含逗号等情况的解析方法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% 原创,如有分享请注明出处,谢谢。

				
时间: 2024-11-08 20:49:09

逗号分割符--字段中含逗号等情况的解析方法Java实现的相关文章

在MySQL字段中使用逗号分隔符

大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性. 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表,一定是一对多的关系 比如下面这个表结构所代表的content与tag这两个对象 mysql> SELECT * FROM content; +----+------+ | id | tags | +----+------+ | 1 | 1

读取CSV ,字段中包含逗号处理

为了以后自己方便查找,记录下来: 1. 引用命名空间, using Microsoft.VisualBasic.FileIO; 2. 关键代码: var reader = new StreamReader(File.OpenRead(path1)); string[] values = null; using (var csvReader = new TextFieldParser(reader)) { while (!csvReader.EndOfData) { csvReader.SetDe

使用rtrim()函数来去掉最后一个字符中含逗号的数据

select * from ( --租用-- select rownum as 编号,gxrxm as 承租人 ,(case trim(gxrxb ) when '1' then '男' when '2' then '女' else '不详' end ) as 性别, rtrim( mobilephone ||','|| LXDH, ',') as 联系方式 , (select (select gxmc from gxxx where t2. gx= gxdm and rownum= 1) fr

mongodb查询数据库中某个字段中的值包含某个字符串的方法

正则表达式最能解决: 例如: db.getCollection('news').find({'content':/^.*120.77.215.34:9999.*$/}) 这里主要是注意正则表达式要写对,该转义的注意转义,否则报错. 原文地址:https://www.cnblogs.com/beileixinqing/p/9475934.html

iOS开发中XML的DOM和SAX解析方法

一.介绍 dom是w3c指定的一套规范标准,核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的“树”,这树各节点和xml各标记对应,通过操纵此“树”来处理xml中的文件.xml文件很大时,建立的“树”也会大,所以会大量占用内存. sax解析器核心是事件处理机制.例如解析器发现一个标记的开始标记时,将所发现的数据会封装为一个标记开始事件,并把这个报告给事件处理器,事件处理器再调用方法(startElement)处理发现的数据.下面我们尝试一下SAX和DOM解析:

数据备份中容易出错的情况及解决方法

1.我有RAID,还需要做数据库备份吗?需要.有了RAID,万一部份磁盘损坏,可以修复数据库,有的情况下数据库甚至可以继续使用.但是,如果哪一天,你的同事不小心删除了一条重要的记录,怎么办?RAID是无能为力的.你需要合适的备份策略,把那条被误删的数据恢复出来.所以有了RAID,仍需要做备份集群,磁盘镜像同理. 2.如果你只做全备份,那么受限于全备份的大小和备份时间,不可能常做.而且只有全备份,不能将数据库恢复至某个时间点.所以,我们需要全备份+日志备份.比如每天一个全备份,每隔1小时或若干分钟

Java中获取键盘输入值的三种方法

Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧: 以下将列出几种方法: 方法一:从控制台接收一个字符,然后将其打印出来 import java.io.*; public static void main(String [] args) throws

Java不规则字符串按照逗号分割的解析方法(字段中又含有逗号)

/** * Java字符串逗号分割解析方法 * 本专门针对双引号中还有逗号或者某个字段无双引号的情况而设计的 * 例如要将 字符串 String sss="101,\"a\",\"中国,江苏\",\"b\",\"中国,北京\",1,0,\"c\""按照逗号进行分割解析; * 正确的split的结果是 (101)(a)( 中国,江苏) ( b)( 中国,北京) ( 1)( 0)( c) *

MySQL逗号分割字段的行列转换测试改进

 <p>由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表).</p><p>这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果.</p> <span class="cnblogs_code_copy"></span><p style="margin: 10px auto; line-height: 19px;