Java 字符串的csv分隔

Java 字符串的csv分隔,java,csv,Java,Csv,可能重复: 我有一个姓名、年龄和国家的列表,格式是“姓名”,16,“加拿大”,有些是“第一,第二”,21,“加拿大”我如何区分这些 我一直在使用.split,但无法使其适用于这些字符串格式。我使用的这有两个类,一个是读取类,另一个是写入csv类,可以处理引用字符串。我将使用并执行以下操作: CSVReader reader = new CSVReader(new FileReader("yourfile.csv")); String [] nextLine; while ((nextLine

可能重复:

我有一个姓名、年龄和国家的列表,格式是
“姓名”,16,“加拿大”
,有些是
“第一,第二”,21,“加拿大”
我如何区分这些

我一直在使用
.split
,但无法使其适用于这些字符串格式。

我使用的这有两个类,一个是读取类,另一个是写入csv类,可以处理引用字符串。

我将使用并执行以下操作:

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
    // nextLine[] is an array of values from the line        
}

可能有一些库可以为您做到这一点(请参阅前面的答案)。 但是,如果您想手工编写代码,则需要构建一个有限状态机,并独立检查字符串中的每个字符,以确定是否包含在引号内。你基本上需要两个州-在_QUOTE,没有_QUOTE-因为考试规则根据你的州而不同。如果在引号内,则要忽略逗号。如果在引号之外,则需要逗号分隔字段

我头上的Psuedo代码看起来像:

String line = <input string>
List<String>fields = new ArrayList<String>();
StringBuffer field = new StringBuffer();
for( int i = 0 ; i < line.length(); i++){
   char c = line.charAt(i);
   switch( state ){
      NO_QUOTE:
         // check if character is a quote or a comma.  If neither append character to field
         if( quote )  
            // change state
            state = IN_QUOTES;
         else if( comman )
            // close the field and start a new one
            fields.add(field.toString());
            field = new StringBuffer();
         else
            field.append(c);
         break;

      IN_QUOTES:
         // only search for a closed quote mark
         if( quote )  
            // change state
            state = OUT_QUOTES;
         else
            field.append(c);
   }
字符串行=
Listfields=newarraylist();
StringBuffer字段=新的StringBuffer();
对于(int i=0;i
综上所述,您的检查规则可能变得过于复杂和棘手(您是否需要检查转义引号?UTF-8或其他字符集如何?等等),并且当其他几个LIB似乎已经为您完成了这项工作时,可能不值得您重新发明轮子。

可能重复:相关: