2016-12-24 17 views
3

Хорошо, это моя первая запись, поэтому вам придется извинить меня, если я ошибаюсь. Короче говоря, мне задан массив строк, и моя цель - сохранить количество уникальных слов строки, а также удалить любые знаки препинания из массива.Удаление всех символов без слов (пунктуация) из строки

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}

Так что мне удалось успешно удалить любое пустое пространство, но я все еще с звездочкой и процентиль подсчитывается.

Любая помощь приветствуется, спасибо.

ответ

0

попробовать что-то вроде этого -

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

Вот окончательная версия кода: public static HashMap uniqueWords (String [] book) { HashMap hm = new HashMap <>(); для (int i = 0; i