繁体   English   中英

在逗号处分割字符串

[英]Split string at commas

我在Java中有一些字符串,如下所示:

    String s = ""Aac 1Zl Aachen",,DE,5048.850N,00611.483E,189.0m,1,,,,"AACHEN""

我想在每个逗号处分割字符串,然后将分割后的值分配给数组。 但是我不知道如何在多个逗号之间保持空值,该值应该为null。

结果数组应如下所示:

    array[0] = ""Aac 1Zl Aachen""
    array[1] = null
    array[2] = "DE"
    array[3] = "5048.850N"
    array[4] = "00611.483E"
    array[5] = "189.0m"
    array[6] = "1"
    array[7] = null
    array[8] = null
    array[9] = null
    array[10] = ""AACHEN""

您可以按逗号分割并后期处理结果数组:

String[] toks =
       "\"Aac 1Zl Aachen\",,DE,5048.850N,00611.483E,189.0m,1,,,,\"AACHEN\"".split(",");
for (int i=0; i<toks.length; i++) {
    if ("".equals(toks[i]))
        toks[i] = null;
}

您可以使用String的split方法,并将空字符串替换为null

import java.util.Arrays;

public class RegFun {

    public static void main(String[] args) {
        String s = "\"Aac 1Zl Aachen\",,DE,5048.850N,00611.483E,189.0m,1,,,,\"AACHEN\"";
        String[] split = s.split(",");

        for (int i = 0; i < split.length; i++) {
            if (split[i].equals("")) {
                split[i] = null;
            }
        }

        System.out.println(Arrays.toString(split));
    }
}

产量

["Aac 1Zl Aachen", null, DE, 5048.850N, 00611.483E, 189.0m, 1, null, null, null, "AACHEN"]
String str = "This is String , split by StringTokenizer, created by mkyong";
                StringTokenizer st = new StringTokenizer(str, ",");//split by commas

我不确定NULL是否是确定的解决方案,因为仅以逗号分割只是邀请
麻烦。 如果Java使用正则表达式支持split(),则可以使用\\s*,\\s*

另一个更好的解决方案是使用真正的csv正则表达式,不仅可以进行字段修整,
但要考虑逗号在引号内。 如果可能的话,后者可以使用split
站不住脚的。

由于对字段进行了修剪,因此不需要使用NULL作为替代来检查NULL。
在正则表达式jargin中,NULL表示该组不匹配任何内容。 与C / C ++一样,在数组jargin中,
NULL表示未分配值的指针。 使用修整消除了歧义。

做正确的事...

您可以使用它来查找所有正则表达式。 每个值在组1或2中返回。
只需加上$1$2

每个字段也被修剪(前导/尾随)空白。

 # "\\G(?:(?:^|,)\\s*)(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|([^,]*?))(?:\\s*(?:(?=,)|$))"

 \G 
 (?:                           # leading comma + optional whitespaces
      (?: ^ | , )
      \s* 
 )
 (?:                           # Cluster group
      " 
      (                             # (1), double quoted string data
           [^"\\]* 
           (?: \\ . [^"\\]* )*
      )
      "
   |                              # OR
      ( [^,]*? )                    # (2), non-quoted field
 )
 (?:                           # trailing optional whitespaces
      \s* 
      (?:
           (?= , )
        |  $ 
      )
 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM