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中有空格,则需要占用空间,否则不占用空间。我的模式需要做哪些更改?
答案 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解决了我的问题。