【问题标题】:String filter ignoring regular expressions忽略正则表达式的字符串过滤器
【发布时间】:2020-05-01 16:18:44
【问题描述】:

我想过滤字符串列表但忽略正则表达式。例如:寻找“test.xy”应该只显示像“test.xy”或“abctest.xy”这样的条目,而不是“testaxy”。我不想要“。”作为通配符工作。

我该怎么做?

【问题讨论】:

  • 所以你想接受任何包含“test.xy”的字符串? docs.oracle.com/javase/8/docs/api/java/lang/…。 javadoc 是你的朋友。
  • 请给我们更详细的问题解释。什么是正则表达式或格式?你想应用它还是忽略它?
  • sry,我试着更具体一些。我希望过滤器完全忽略正则表达式。当我按关键字“a”过滤列表时,我不希望过滤器显示“ab”或“aa”之类的条目。
  • 您可以使用任何不将针解释为正则表达式的方法。
  • sry,我在开始帖子中的示例是错误的。我编辑了一个正确的。

标签: java regex filter


【解决方案1】:

如果你想过滤字符串并将它们收集到一个新的列表中,你可以这样做;

    List<String> strings = List.of("mytest.xy",
            "abctest.xy", "test.xy", "testaxy", "testy");
    String target = "test.xy";
    List<String> result = strings.stream()
            .filter(str -> str.contains(target))
            .collect(Collectors.toList());

    result.forEach(System.out::println);

打印

mytest.xy
abctest.xy
测试.xy

【讨论】:

    【解决方案2】:

    下面是一个例子:

    import java.util.Arrays;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            List<String> list = Arrays.asList("test.xy", "abctest.xy", "testaxy", "testy");
            for (String s : list) {
                if (s.contains("test.xy"))
                    System.out.println(s);
            }
    
            // Display using Stream
            System.out.println("\nFilter and display using Stream:");
            list.stream().filter(s -> s.contains("test.xy")).forEach(System.out::println);
        }
    }
    

    输出:

    test.xy
    abctest.xy
    
    Filter and display using Stream:
    test.xy
    abctest.xy
    

    【讨论】:

    • 对不起,我的例子是错误的。我在开始帖子中对其进行了编辑。现在应该更清楚我在寻找什么。还是谢谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多