mureinik的答案很接近,但在一个重要的边缘情况下是错误的:当尾随定界符位于末尾时。为了考虑到这一点,您需要使用:
contents.split("\\^", -1)
final String line = "alpha ^beta ^^^";
List<String> fieldsA = Arrays.asList(line.split("\\^"));
List<String> fieldsB = Arrays.asList(line.split("\\^", -1));
System.out.printf("# of fieldsA is: %d\n", fieldsA.size());
System.out.printf("# of fieldsB is: %d\n", fieldsB.size());
# of fieldsA is: 2
# of fieldsB is: 5
String.split
在遇到连续的分隔符时会留下一个空字符串(""
),只要你使用正确的正则表达式。如果你想将它替换为"empty"
,你需要自己这样做:
String[] split = barcodeFields.split("\\^");
for (int i = 0; i < split.length; ++i) {
if (split[i].length() == 0) {
split[i] = "empty";
}
}
^+
表示一个或多个连续的插入符号。去掉加号。String[] barcodeFields = contents.split("\\^");
它不会“吃掉”空字段。对于空字段,您将得到(您请求的)""
。
length
属性(而不是 size()
方法)。我更喜欢使用 .isEmpty()
而不是 .length() == 0
。 - Elliott Frisch[blah, , bladiblah, moarblah]
。 String test = "blah^^bladiblah^moarblah";
System.out.println(Arrays.toString(test.split("\\^")));
在这里,^^
被替换为一个空字符串 ""