Преобразование строки предложения в массив слов в Java - PullRequest
36 голосов
/ 13 января 2011

Мне нужна моя программа на Java, чтобы взять строку вроде:

"This is a sample sentence."

и превратить его в строковый массив, например:

{"this","is","a","sample","sentence"}

Без точек и знаков препинания (желательно). Кстати, строка ввода всегда состоит из одного предложения.

Есть ли простой способ сделать это, чего я не вижу? Или мы действительно должны много искать пробелы и создавать новые строки из областей между пробелами (которые являются словами)?

Ответы [ 15 ]

54 голосов
/ 13 января 2011

String.split () сделает большинство того, что вы хотите.Затем вам может понадобиться зациклить слова, чтобы убрать пунктуацию.

Например:

String s = "This is a sample sentence.";
String[] words = s.split("\\s+");
for (int i = 0; i < words.length; i++) {
    // You may want to check for a non-word character before blindly
    // performing a replacement
    // It may also be necessary to adjust the character class
    words[i] = words[i].replaceAll("[^\\w]", "");
}
18 голосов
/ 06 апреля 2016

Теперь, это может быть достигнуто только с split, так как требуется регулярное выражение:

String s = "This is a sample sentence with []s.";
String[] words = s.split("\\W+");

это даст слова как: {"this","is","a","sample","sentence", "s"}

\\W+ будет соответствовать всем не алфавитным символам, встречающимся один или несколько раз. Таким образом, нет необходимости заменять. Вы также можете проверить другие шаблоны.

12 голосов
/ 03 ноября 2014

Вы можете использовать <a href="http://download.oracle.com/javase/6/docs/api/java/text/BreakIterator.html#getWordInstance%28%29" rel="noreferrer">BreakIterator.getWordInstance</a>, чтобы найти все слова в строке.

public static List<String> getWords(String text) {
    List<String> words = new ArrayList<String>();
    BreakIterator breakIterator = BreakIterator.getWordInstance();
    breakIterator.setText(text);
    int lastIndex = breakIterator.first();
    while (BreakIterator.DONE != lastIndex) {
        int firstIndex = lastIndex;
        lastIndex = breakIterator.next();
        if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(text.charAt(firstIndex))) {
            words.add(text.substring(firstIndex, lastIndex));
        }
    }

    return words;
}

Тест:

public static void main(String[] args) {
    System.out.println(getWords("A PT CR M0RT BOUSG SABN NTE TR/GB/(G) = RAND(MIN(XXX, YY + ABC))"));
}

Ouput:

[A, PT, CR, M0RT, BOUSG, SABN, NTE, TR, GB, G, RAND, MIN, XXX, YY, ABC]
11 голосов
/ 13 января 2011
7 голосов
/ 04 декабря 2013

Вы можете просто разделить вашу строку, используя это регулярное выражение

String l = "sofia, malgré tout aimait : la laitue et le choux !" <br/>
l.split("[[ ]*|[,]*|[\\.]*|[:]*|[/]*|[!]*|[?]*|[+]*]+");
5 голосов
/ 15 апреля 2015

Попробуйте использовать следующее:

String str = "This is a simple sentence";
String[] strgs = str.split(" ");

Это создаст подстроку в каждом индексе массива строк, используя пробел в качестве точки разделения.

5 голосов
/ 13 января 2011

Самый простой и лучший ответ, который я могу придумать, - это использовать следующий метод, определенный для строки java -

String[] split(String regex)

и просто выполнить «Это примерное предложение» .split («»).Поскольку для этого требуется регулярное выражение, вы также можете выполнять более сложные разбиения, которые могут включать удаление ненужных знаков препинания и других подобных символов.

4 голосов
/ 13 января 2011

Используйте string.replace(".", "").replace(",", "").replace("?", "").replace("!","").split(' '), чтобы разбить ваш код на массив без точек, запятых, вопросительных знаков или восклицательных знаков.Вы можете добавлять / удалять столько звонков, сколько хотите.

3 голосов
/ 13 января 2011

Попробуйте это:

String[] stringArray = Pattern.compile("ian").split(
"This is a sample sentence"
.replaceAll("[^\\p{Alnum}]+", "") //this will remove all non alpha numeric chars
);

for (int j=0; i<stringArray .length; j++) {
  System.out.println(i + " \"" + stringArray [j] + "\"");
}
2 голосов
/ 14 марта 2014

Ниже приведен фрагмент кода, который разделяет предложение на слово и дает его счет.

 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;

 public class StringToword {
public static void main(String[] args) {
    String s="a a a A A";
    String[] splitedString=s.split(" ");
    Map m=new HashMap();
    int count=1;
    for(String s1 :splitedString){
         count=m.containsKey(s1)?count+1:1;
          m.put(s1, count);
        }
    Iterator<StringToword> itr=m.entrySet().iterator();
    while(itr.hasNext()){
        System.out.println(itr.next());         
    }
    }

}
...