我正在寻找问题的解决方案。我需要创建一种方法,该方法为任何给定的文本(包括非英语字母和特殊字符)创建单词列表和仅单词列表。我搜索了很多东西,并且在这里阅读文档,但是这些都不适合我。最好的之一是这个:
String line = " W metal, w liczbę, w trupie ciało, -"
String[] words = line.split("\\P{javaLetter}+");
for (int i = 0; i < words.length; i++) {
if (!words[i].equals("")) { // I don't want to check everytime
anotherList.add(word[i].toLowerCase())
}
}
}
但结果是:
["", "W", "metal", "w", "liczbę", "w", "trupie", "ciało"]
String开头的空格会破坏我的正则表达式。哪种正则表达式是使用拉丁字母以任何语言制作单词的正确正则表达式(不在乎英语单词中的撇号)?
您可以使用相反的方法-匹配:
List<String> words = new ArrayList<>();
String line = " W metal, w liczbę, w trupie ciało, -";
Matcher m = Pattern.compile("\\p{L}+").matcher(line);
while (m.find()) {
words.add(m.group());
}
System.out.println(words); // => [W, metal, w, liczbę, w, trupie, ciało]
请参阅IDEONE演示。在\\p{L}+
将匹配1+任何Unicode字母。
有一种使用拆分方法的方法,但是我们需要先对输入字符串进行预处理:
String line = " W metal, w liczbę, w trupie ciało, -";
String[] words = line.replaceFirst("^\\P{L}+", "").split("\\P{L}+");
System.out.println(Arrays.toString(words));
在.replaceFirst("^\\P{L}+", "")
将从字符串的开头,从而去除所有非字母符号,留下分割阵列中没有空元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句