从句子中提取单词的方法

时间:2015-11-22 14:40:35

标签: java regex

我很难写一个从句子中提取单词的方法。单词应以aEeEiIoOuU开头,长度为5个字母,例如以太。

该方法应该返回一个String数组。这里的问题是我希望数组的长度与foudn字相同。如果找到3个字,则数组长度也应为3。

这是我目前的代码:

public static String[] extractWords(String text){
    String text = "einer hallo hallo einer";
    String pattern = "\\b[AaEeIiOoUu]\\p{L}\\p{L}\\p{L}\\p{L}\\b";
    Pattern p = Pattern.compile(pattern, Pattern.UNICODE_CASE);
    Matcher m = p.matcher(text);

    int i = 0;
    while (m.find()){
        i++;

    }

    String[] array = new String[i];
    while(m.find()){
        System.out.println(m.group());
        array[i] = m.group();
        i++;
    }
}

1 个答案:

答案 0 :(得分:0)

您应该在这里使用ArrayList。要使用数组,你必须进行两次匹配,这是不必要的额外工作。

另外,您知道,第二个while(m.find())循环甚至不会运行一次,因为匹配器已经被第一个循环耗尽。您需要重新初始化Matcher对象:

Matcher m = p.matcher(text);  // Needed before second while loop.

但这不是必需的。我们改为使用ArrayList

public static String[] extractWords(String text){
    String text = "einer hallo hallo einer";
    // Use quantifier to match 4 characters, instead of repeating it 4 times.
    String pattern = "\\b[AaEeIiOoUu]\\p{L}{4}\\b";
    Pattern p = Pattern.compile(pattern, Pattern.UNICODE_CASE);
    Matcher m = p.matcher(text);

    List<String> matchedWords = new ArrayList<>();

    while (m.find()){
        matchedWords.add(m.group());
    }

    // If you want an array, convert the list to array
    String[] matchedWordArray = matchedWords.toArray(new String[matchedWords.size()]);
}