Java 在逗号处拆分字符串
我有一些Java字符串,如下所示:Java 在逗号处拆分字符串,java,arrays,regex,string,Java,Arrays,Regex,String,我有一些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" ar
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[]toks=
“Aac 1Zl亚琛\”,DE,5048.850N,00611.483E,189.0m,1,,,,,,“亚琛\”。拆分(,”;
对于(int i=0;i,您可以按逗号拆分并对生成的数组进行后期处理:
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[]toks=
“Aac 1Zl亚琛\”,DE,5048.850N,00611.483E,189.0m,1,,,,,,“亚琛\”。拆分(,”;
对于(inti=0;i,您可以使用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));
}
}
您可以使用字符串的方法,并将空字符串替换为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));
}
}
我不确定空值是否是一个确定的解决方案,因为单独使用逗号进行拆分只会邀请
麻烦。如果Java使用正则表达式支持split(),您可以使用\s*,\s*
另一个更好的解决方案是使用真正的csv正则表达式,它不仅可以进行字段修剪,
但要考虑逗号在引号中的位置。如果可能的话,后者使用split
站不住脚
由于字段已修剪,因此不需要使用NULL作为检查,可以使用长度作为替代项。
在regex-jargin中,NULL表示组没有匹配任何内容。在array-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*
(?:
(?= , )
| $
)
)
我不确定空值是否是一个确定的解决方案,因为单独使用逗号进行拆分只会邀请
麻烦。如果Java使用正则表达式支持split(),您可以使用\s*,\s*
另一个更好的解决方案是使用真正的csv正则表达式,它不仅可以进行字段修剪,
但要考虑逗号在引号中的位置。如果可能的话,后者使用split
站不住脚
由于字段已修剪,因此不需要使用NULL作为检查,可以使用长度作为替代项。
在regex-jargin中,NULL表示组没有匹配任何内容。在array-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*
(?:
(?= , )
| $
)
)
首先,您应该转义那些引号…并查看字符串拆分将字符串引号作为值的一部分或赋值为NULL没有任何好处。首先,您应该转义那些引号…并查看字符串拆分将字符串引号作为值的一部分或赋值为NULL没有任何好处。我可以轻松编写正则表达式来处理引号是的,但这不是问题的一部分。我相信OP不知道如何保持多个逗号之间的空值,如null
。我可以轻松编写正则表达式来处理引号,但这不是问题的一部分。我相信OP不知道如何保持多个逗号之间的空值,如null
。