Java解析值直到行尾
这个问题很简单——可能吧——但如果没有解决办法,我就找不到解决办法 我想解析像这样的东西Java解析值直到行尾,java,regex,pattern-matching,Java,Regex,Pattern Matching,这个问题很简单——可能吧——但如果没有解决办法,我就找不到解决办法 我想解析像这样的东西 1) item1;; item3 2) item1;item2; 3) ; item2; 4) ;; ... 我有一个匹配函数,它匹配并返回给定索引中的所有项,即stringlist: public static List<String> getAllMatchings(String input, String reg, int groupIndex) { Pattern patter
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;
}
不太好。但我没有找到解决这个问题的办法。有人能帮我吗
添加:顺便说一句。在某些情况下,这种变通方法不起作用。案例4)仅提供2个空元素。只有在项目不为空时,才能添加项目:
String item = matcher.group(groupIndex).trim();
if (!item.isEmpty()) {
ls.add(item);
}
为什么不直接用分号分开呢 更新:计算分号以确保元素数正确
int count = StringUtils.countMatches("item1;item2;;;;", ";");
String[] values = input.split(";",count);
(需要)如果报价不是字符串的一部分,可以对字符串使用
split
方法:
String input = "item1; item2; item3";
List<String> list = Arrays.asList(input.split("; ");
String input=“item1;item2;item3”;
List=Arrays.asList(input.split(“;”);
您可以在空字符串上进行筛选,也可以在matcher.start/end相等的情况下进行筛选。因为我希望能够灵活地为匹配元素设置更具体的模式string.split接受正则表达式,因此它可能适合您的使用。我建议您这样做,除非您需要在提取中添加逻辑。以下内容如何?string行=“item1;;;”String[]b=a.split(;”)。一个有副作用的结果。:/I这里需要一个四元素数组。所以您希望项目2、3和4是空字符串?您的其他示例在分号后有空格-这相当于输入字符串“item 1;”;“空格是可选的。这是Grimmy解决方案的问题。否则它会起作用:/Sry,类似于“item1;;item3”的内容有问题,因为项目可以为空。我稍微更改了我的问题,因为我没有提到这一点
int count = StringUtils.countMatches("item1;item2;;;;", ";");
String[] values = input.split(";",count);
String input = "item1; item2; item3";
List<String> list = Arrays.asList(input.split("; ");