2014-07-17 63 views
0

有人可以告訴我,如果存在PHP preg_grep()的Java等價物嗎?或者提供給我一個完成相同的好方法?用於PHP的Java相當於preg_grep

我需要對輸入數組中的元素進行字符串匹配,並使用輸入數組的索引返回數組,如preg_grep()所示。

+0

你可以看看http://stackoverflow.com/questions/5084419/java-preg-match-array – Simon

+0

爲了將來的參考,除了語言/風味之外,關於正則表達式的問題應該被標記[tag:regex]標籤([tag:java],[tag:php]等)。 [tag:qregularexpression]標籤是指您未使用的特定實現。 –

回答

0

沒有確切的等值。但是,您可以使用String#matches(String)函數來測試字符串是否與給定模式匹配。例如:

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

如果你想匹配的指數結果數組,你可以遍歷字符串你給定的輸入數組,檢查匹配和循環的當前索引添加到您的結果數組。

0

你可以使用這種功能,使用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

+0

謝謝,我認爲這應該做我的工作。我是新來的Java,我必須將我的PHP項目移植到Java,以便自動運行腳本。由於我是java新手,我將不得不花費一些時間來測試您的解決方案。 – user3127090

0

如何像:

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