每个String之后都占用空间

时间:2016-08-09 08:25:39

标签: java pattern-matching matcher

String delimiterStr = "|", line="1231|08062016|4441|10|PayeeName1|REF1";
String ISSUE_UPLOAD_FILE_PATTERN = "(?<=(^|" + delimiterStr + "))(([^\"" + delimiterStr + "]*)|\"([^\"]*)\")(?=($|" + delimiterStr + "))";

List<String> splitString = new ArrayList<String>();
Matcher matcher = Pattern.compile(ISSUE_UPLOAD_FILE_PATTERN).matcher(line);
while (matcher.find()) {
  if (matcher.group(3) != null) {//NOPMD,old code
    System.out.println(matcher.group(3));
    splitString.add(matcher.group(3));
  } 
}
System.out.println(splitString.size()+"::--->"+splitString);

OutPut :-  12::--->[1231, , 08062016, , 4441, , 10, , PayeeName1, , REF1, ]

上面的模式是在每个分割字符串后占用空格,如输出中所示。每个字符串后我都不想占用空间。如果输入String中有空格,则需要占用空间,否则不占用空间。我的模式需要做哪些更改?

2 个答案:

答案 0 :(得分:1)

表现如预期。在toString()上调用ArrayList时,会使用AbstractCollection的实现,如下所示:

public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' '); // adds space
    }
}

您可以添加一个简单的循环来验证是否没有为每个元素添加空格:

        for (String s : splitString) {
            System.out.println(s + "X");
        }

答案 1 :(得分:0)

ISSUE_UPLOAD_FILE_PATTERN =“(?&lt; =(^ |”+ delimiterStr +“))(([^ \”“+ delimiterStr +”] [^“+ delimiterStr +”])| \“([ ^ \“] )\”)(?=($ |“+ delimiterStr +”))“;

Above Pattern解决了我的问题。