当前位置: 首页 > 知识库问答 >
问题:

Java8-使用regex表达式从string中查找string列表[重复]

斜烈
2023-03-14
private List<String> getDataOnRegx(String str) {
    Pattern filerRegx = Pattern.compile("\\(([a-zA-Z,0-9]*)\\s*\\),?");
    Matcher regexMatcher = filerRegx.matcher(str);
    return Stream.of(str).
            filter(s -> regexMatcher.find() && regexMatcher.group(1) != null).
            map(r -> new String(regexMatcher.group(1))).
            collect(Collectors.toList());

}
private List<String> getDataOnRegx(String str) {
Pattern regex = Pattern.compile("\\(([a-zA-Z,0-9]*)\\s*\\),?");
    Matcher regexMatcher = regex.matcher(str);
    List<String>dataList = new ArrayList<String>();
    while (regexMatcher.find()) {
          if (regexMatcher.group(1) != null) {
                dataList.add(regexMatcher.group(1));
          }
    }
    System.out.println(dataList);
    return dataList; 

}

谢谢,阿图尔

共有1个答案

轩辕煜
2023-03-14

在java-9中可以通过扫描程序#findall:

    String test = "(A,1),(Y,4),(F,5)";
    Scanner sc = new Scanner(test);
    Pattern filerRegx = Pattern.compile("\\(([a-zA-Z,0-9]*)\\s*\\),?");

    List<String> results = sc.findAll(filerRegx)
            .map(mr -> mr.group(1))
            .filter(Objects::nonNull)
            .collect(Collectors.toList());

    System.out.println(results);

我不知道这个重复的答案怎么不能回答你的问题。你需要做一个非常简单的改变:

  static final class MatchItr extends Spliterators.AbstractSpliterator<String> {
    private final Matcher matcher;

    MatchItr(Matcher m) {
        super(m.regionEnd() - m.regionStart(), ORDERED | NONNULL);
        matcher = m;
    }

    @Override
    public boolean tryAdvance(Consumer<? super String> action) {
        if (!matcher.find()) {
            return false;
        }

        if (matcher.group(1) == null) {
            return false;
        }

        action.accept(matcher.group(1));
        return true;
    }
}

并使用它:

MatchItr mIter = new MatchItr(regexMatcher);
StreamSupport.stream(mIter, false)
            .forEach(System.out::println);
 类似资料:
  • 描述 (Description) java.lang.String.split(String regex)方法将此字符串拆分为给定正则表达式的匹配项。 此方法的工作方式与调用方法相同,即split(String regex,int limit)与给定的表达式和limit参数为零。 因此,结尾的空字符串不包含在结果数组中。 声明 (Declaration) 以下是java.lang.String.s

  • 描述 (Description) java.lang.String.split(String regex)方法将此字符串拆分为给定正则表达式的匹配项。 此方法的工作方式与调用方法相同,即 split(String regex,int limit) 与给定的表达式和limit参数为零。 因此,结尾的空字符串不包含在结果数组中。 声明 (Declaration) 以下是java.lang.String

  • 描述 (Description) java.lang.String.split(String regex)方法将此字符串拆分为给定正则表达式的匹配项。 此方法的工作方式与调用方法相同,即 split(String regex,int limit) 与给定的表达式和limit参数为零。 因此,结尾的空字符串不包含在结果数组中。 声明 (Declaration) 以下是java.lang.String

  • 描述 (Description) 此方法有两个变体,并围绕给定正则表达式的匹配拆分此字符串。 语法 (Syntax) 以下是此方法的语法 - public String[] split(String regex) 参数 (Parameters) 这是参数的细节 - regex - 分隔正则表达式。 返回值 (Return Value) 它返回通过将此字符串拆分为给定正则表达式的匹配而计算的字符串

  • 描述 (Description) 此方法将使用给定替换匹配给定正则表达式的此字符串的第一个子字符串替换。 语法 (Syntax) 以下是此方法的语法 - public String replaceFirst(String regex, String replacement) 参数 (Parameters) 这是参数的细节 - regex - 要与此字符串匹配的正则表达式。 replacement

  • 描述 (Description) 此方法将使用给定替换匹配给定正则表达式的此字符串的每个子字符串替换。 语法 (Syntax) 以下是此方法的语法 - public String replaceAll(String regex, String replacement) 参数 (Parameters) 这是参数的细节 - regex - 要与此字符串匹配的正则表达式。 replacement -