Java Split String连续分隔符

时间:2015-07-31 16:45:07

标签: java regex

我需要拆分从外部源传入我的应用程序的字符串。这个String用插入符号String[] barcodeFields = contents.split("\\^+"); 分隔,这是我如何将字符串拆分成数组

""

enter image description here

除了一些传入的字段是空的并且我需要考虑它们之外,这种方法很好。我需要将"null""empty""empty"插入任何缺失的字段。

缺少的字段有连续的分隔符。如何将Java字符串拆分为数组并插入{{1}}之类的字符串作为具有连续分隔符的占位符?

4 个答案:

答案 0 :(得分:3)

只要您使用正确的正则表达式,

String.split会留下一个空字符串(""),它会遇到连续的分隔符。如果您想将其替换为"empty",则必须自行填写:

String[] split = barcodeFields.split("\\^");
for (int i = 0; i < split.length; ++i) {
    if (split[i].length() == 0) {
        split[i] = "empty";
    }
}

答案 1 :(得分:2)

使用^+表示一个(或多个连续)克拉字符。删除加号

String[] barcodeFields = contents.split("\\^");

它不会空字段。对于空字段,您将获得(您的请求)""

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

[blah, , bladiblah, moarblah]中的以下结果:

    String test = "blah^^bladiblah^moarblah";
    System.out.println(Arrays.toString(test.split("\\^")));

^^替换为"",空字符串