【问题标题】:Java equivalent for PHP preg_grepPHP preg_grep 的 Java 等效项
【发布时间】:2014-09-08 13:06:47
【问题描述】:

有人能告诉我是否存在适用于 PHP preg_grep() 的 Java 等价物吗?或者为我提供一个很好的方法来完成同样的事情?

我需要对输入数组中的元素进行字符串匹配,并返回带有输入数组索引的数组,就像preg_grep() 所做的那样。

【问题讨论】:

标签: java php regex equivalent


【解决方案1】:

没有确切的等价物。但是您可以使用String#matches(String) 函数来测试字符串是否与给定模式匹配。例如:

String s = "stackoverflow";
s.matches("stack.*flow");   // <- true
s.matches("rack.*blow");    // <- false

如果您想要一个具有匹配索引的结果数组,您可以遍历给定的输入字符串数组,检查匹配并将循环的当前索引添加到结果数组。

【讨论】:

    【解决方案2】:

    您可以使用这种函数,使用String.matches() 并遍历您的数组:

    public static List<Integer> preg_grep(String pattern, List<String> array) 
    {
        List<Integer> indexes = new ArrayList<Integer>();
    
        int index = 0;
        for (String item : array) {
            if (item.matches("ba.*")) {
                indexes.add(index);
            }
            ++index;
        }
    
        return indexes;
    }
    

    Ideone Example

    【讨论】:

    • 谢谢,我认为这应该可以完成我的工作。我是 java 新手,我必须将我的 php 项目移植到 java 以自动运行脚本。由于我是 Java 新手,我将不得不花一些时间来测试您的解决方案。
    【解决方案3】:

    怎么样:

    private static String[] filterArrayElem(String[] inputArray) {
        Pattern pattern = Pattern.compile("(^a.*)");
    
        List<String> resultList = new ArrayList<>();
        for (String inputStr : inputArray) {
            Matcher m = pattern.matcher(inputStr);
            if (m.find()) {
                resultList.add(m.group(0));
            }
        }
        return resultList.toArray(new String[0]);
    }
    

    然后您可以通过以下方式使用它:

        String [] input = { "apple", "banana", "apricot"};
        String [] result = filterArrayElem(input);
    

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多