我希望解析一个输入String
,当我这样做时,我想检查每个单词的出现次数,同时删除所有非字母字符。
例如:
String str = "test man `xy KA XY test!.. KA kA TeST man poqw``e TES`T"
String s = line.replaceAll("[^\\p{L}\\p{N}\\ ]", "");
String[] werd = alphaLine.split(" ");
for(int i=0; i<werd.size(); i++) {
if(werd[i].toLowerCase().equals("test")) {
testcounter++;
elseif(werd[i].toLowerCase().equals("ka")) {
kacounter++;
etc..
我将检查很长时间String
,并将检查此示例中的许多目标String
(ka
和test
),并且正在尝试看看我是否可以在一次传递中执行此代码,现在似乎对于.replaceAll()
,.split()
,然后是for循环,我将遍历所有String
s 3时间,什么时候可以做一次。
答案 0 :(得分:0)
不确定我是否在同一页面上,但听起来你在询问如何在搜索单词时减少查找次数。如果你有大量的搜索词,这可能不是最好的方法,但是应该给出较小列表中每个词的出现次数。
Map<String, Integer> occurrences = new HashMap<String, Integer>();
List<String> words = new ArrayList<String>();
words.add("foo");
words.add("bar");
//build regex - note: if this is done within an outer loop, then you should consider using StringBuilder instead
//The \b in regex is a word boundary
String regex = "\\b(";
for(int i = 0; i < words.size(); i++) {
//add word to regex
regex += (0 == i ? "" : "|") + words.get(i);
//initial occurrences
occurrences.add(words.get(i), 0);
}
regex += ")\\b";
Pattern patt = Pattern.compile(regex);
Matcher matcher = patt.matcher(search_string);
//check for matches
while (matcher.find()) {
String key = matcher.group();
int numOccurs = occurrences.get(key) + 1;
occurrences.put(key, numOccurs);
}
编辑:这是假设您在此之前处理非孤儿规定