我在Java中有一些字符串,如下所示:
String s = ""Aac 1Zl Aachen",,DE,5048.850N,00611.483E,189.0m,1,,,,"AACHEN""
我想在每个逗号处拆分字符串并将拆分的值分配给数组。但我无法弄清楚如何在多个逗号之间保留空值,这些逗号应该为空。
生成的数组应如下所示:
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""
答案 0 :(得分:2)
您可以使用逗号分割并对生成的数组进行后处理:
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;
}
答案 1 :(得分:2)
您可以使用split,String方法并将空字符串替换为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"]
答案 2 :(得分:0)
String str = "This is String , split by StringTokenizer, created by mkyong";
StringTokenizer st = new StringTokenizer(str, ",");//split by commas
答案 3 :(得分:0)
我不确定NULL是一个明确的解决方案,因为单独使用逗号分割只是邀请
麻烦。可能,如果Java使用正则表达式支持split(),则可以使用\s*,\s*
。
另一个更好的解决方案是使用真正的csv正则表达式,它不仅可以进行场修剪,而且可以使用 但考虑到引号内的逗号。如果可能的话,后者使用拆分 站不住脚的。
由于字段被修剪,因此不需要使用NULL作为检查,使用长度作为替代
在regex jargin中,NULL表示该组与任何内容都不匹配。在数组jargin中,如在C / C ++中,
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*
(?:
(?= , )
| $
)
)