Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java解析值直到行尾_Java_Regex_Pattern Matching - Fatal编程技术网

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("; ");