Java字符串解析和求和

Java字符串解析和求和,java,string,parsing,Java,String,Parsing,我希望解析输入的字符串,在解析过程中,我希望检查每个单词的出现次数,同时删除所有非字母字符 例如: 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++)

我希望解析输入的
字符串
,在解析过程中,我希望检查每个单词的出现次数,同时删除所有非字母字符

例如:

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 str=“test man`xy KA xy test!”.KA KA test man poqw``e TES`T”
字符串s=line.replaceAll(“[^\\p{L}\\p{N}\\\]”,“”);
字符串[]werd=alphaLine.split(“”);

对于(int i=0;i我不确定我是否在同一页上,但听起来你在问如何减少搜索单词时的查找次数。如果你有大量搜索单词,这可能不是最好的方法,但应该给出较小列表中每个单词的出现次数

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);
}
Map引用=新HashMap();
List words=new ArrayList();
词语。添加(“foo”);
词语。添加(“酒吧”);
//构建正则表达式-注意:如果这是在外循环中完成的,那么你应该考虑使用StringBuilder来代替。
//正则表达式中的\b是单词边界
字符串regex=“\\b(”;
for(int i=0;i

编辑:这是假设您在这一点之前已经考虑到了非alphanum要求

我不会害怕三个循环。不过,请查看
StreamTokenizer
s。有很好的数据结构可用于此目的,并有经过良好测试的实现,例如: