简单的问题 - 可能 - 但我找不到没有解决方法的解决方案。
我想解析某事。喜欢
1) item1;; item3
2) item1;item2;
3) ; item2;
4) ;;
...
我有一个匹配函数匹配并返回给定索引处的所有项目如stringlist:
public static List<String> getAllMatchings(String input, String reg, int groupIndex) {
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(input);
List<String> ls = new ArrayList<String>();
while (matcher.find()) {
if (groupIndex <= matcher.groupCount()) {
ls.add(matcher.group(groupIndex));
}
}
return ls;
}
现在,有了这样一行,我希望有一个像{“item1”,“item2”,“item3”}这样的字符串列表。但我得到 - 使用我的解决方案 - {“item1”,“item2”,“item3”,“”}:
List<String> strList = getAllMatchings(line, "([^;]*)(;|\\z)",1);
因此,我必须做出一个丑陋的解决方法:
strList.remove(strList.size()-1);
不好。但我找不到解决这个问题的方法。有人能帮助我吗?
加法:顺便说一下。有时这种解决方法不起作用。案例4)只给了我2个空元素。
答案 0 :(得分:1)
为什么不分开分号?
更新:计算分号以确保元素数量正确
int count = StringUtils.countMatches("item1;item2;;;;", ";");
String[] values = input.split(";",count);
(需要Commons Lang)
答案 1 :(得分:0)
只有在项目不为空时才能添加项目:
String item = matcher.group(groupIndex).trim();
if (!item.isEmpty()) {
ls.add(item);
}
答案 2 :(得分:0)
如果引号不是字符串的一部分,则可以在String上使用split
方法:
String input = "item1; item2; item3";
List<String> list = Arrays.asList(input.split("; ");
答案 3 :(得分:0)
您可以过滤空字符串或匹配matcher.start / end。