从字符串中删除所有非字字符(标点符号)

从字符串中删除所有非字字符(标点符号)

问题描述:

好的,这是我第一次发布,所以如果我犯了任何错误,您将不得不原谅我。长话短说,我给了一个字符串数组,我的目标是保持字符串的唯一字的计数以及从数组中删除任何标点符号。从字符串中删除所有非字字符(标点符号)

public static HashMap<String, Integer> uniqueWords(String[] book) { 
    HashMap<String, Integer> hm = new HashMap<>(); 

    for (int i = 0; i < book.length; i++) { 
     if (hm.containsKey(book[i])) { 
      hm.put(book[i], hm.get(book[i]) + 1); 
     } else { 
      book[i] = book[i].replaceAll("[^a-zA-Z]","").replaceAll("\\p{Punct}","").replaceAll("\\W+","").replaceAll("\\n","").toLowerCase(); 
      hm.put(book[i], 1); 
     } 
    } 
    return hm; 
} 

输入:{ “红大马哈鱼”, “鲑鱼”, “鲑鱼”, “蓝鱼”, “鯥”, “鯥”, “*”, “%”, “”};

输出:{= 2,青鱼= 3,红鱼= 3}

所以我已经设法成功地删除任何空白,但我仍然有星号亮亮相百分。

任何帮助表示赞赏,谢谢。

尝试这样的事情 -

public static HashMap<String, Integer> uniqueWords(String[] book) { 
    HashMap<String, Integer> hm = new HashMap<>(); 
string strBook = ""; 
int key = 1; 
    for (int i = 0; i < book.length; i++) { 
    strBook= book[i].replaceAll("[^a-zA-Z]","").replaceAll("\\p{Punct}","").replaceAll("\\W+","").replaceAll("\\n","").toLowerCase(); 
     if (!hm.containsKey(strBook)) { 
      hm.put(key, strBook); 
      key++; 
     } 
    } 
    return hm; 
} 
+0

我想这一些变化都无济于事,感谢您的解决方案无论哪种方式。 –

+0

我意识到我的错误。很少有的情况下,非单词字符不会附加到包含单词的字符串,在这种情况下,我的代码将删除非单词字符: –

+0

以下是代码的最终版本: 公共静态HashMap uniqueWords(String [] book) { HashMap hm = new HashMap ();对于(int i = 0; i