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

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

"This is a sample sentence."

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

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

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

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

Ответы [ 15 ]

1 голос
/ 10 сентября 2016

Еще один способ сделать это - StringTokenizer. например: -

 public static void main(String[] args) {

    String str = "This is a sample string";
    StringTokenizer st = new StringTokenizer(str," ");
    String starr[]=new String[st.countTokens()];
    while (st.hasMoreElements()) {
        starr[i++]=st.nextElement();
    }
}
1 голос
/ 25 августа 2014

Я уже опубликовал этот ответ где-нибудь, я сделаю это здесь снова.Эта версия не использует какой-либо основной встроенный метод. Вы получили массив символов, конвертируйте его в строку. Надеюсь, это поможет!

import java.util.Scanner;

public class SentenceToWord 
{
    public static int getNumberOfWords(String sentence)
    {
        int counter=0;
        for(int i=0;i<sentence.length();i++)
        {
            if(sentence.charAt(i)==' ')
            counter++;
        }
        return counter+1;
    }

    public static char[] getSubString(String sentence,int start,int end) //method to give substring, replacement of String.substring() 
    {
        int counter=0;
        char charArrayToReturn[]=new char[end-start];
        for(int i=start;i<end;i++)
        {
            charArrayToReturn[counter++]=sentence.charAt(i);
        }
        return charArrayToReturn;
    }

    public static char[][] getWordsFromString(String sentence)
    {
        int wordsCounter=0;
        int spaceIndex=0;
        int length=sentence.length();
        char wordsArray[][]=new char[getNumberOfWords(sentence)][]; 
        for(int i=0;i<length;i++)
        {
            if(sentence.charAt(i)==' ' || i+1==length)
            {
            wordsArray[wordsCounter++]=getSubString(sentence, spaceIndex,i+1); //get each word as substring
            spaceIndex=i+1; //increment space index
            }
        }
        return  wordsArray; //return the 2 dimensional char array
    }


    public static void main(String[] args) 
    {
    System.out.println("Please enter the String");
    Scanner input=new Scanner(System.in);
    String userInput=input.nextLine().trim();
    int numOfWords=getNumberOfWords(userInput);
    char words[][]=new char[numOfWords+1][];
    words=getWordsFromString(userInput);
    System.out.println("Total number of words found in the String is "+(numOfWords));
    for(int i=0;i<numOfWords;i++)
    {
        System.out.println(" ");
        for(int j=0;j<words[i].length;j++)
        {
        System.out.print(words[i][j]);//print out each char one by one
        }
    }
    }

}
1 голос
/ 14 января 2013

string.replaceAll () некорректно работает с локалью, отличной от предопределенной.По крайней мере, в jdk7u10.

В этом примере создается словарь слов из текстового файла с набором символов кириллицы Windows CP1251

    public static void main (String[] args) {
    String fileName = "Tolstoy_VoinaMir.txt";
    try {
        List<String> lines = Files.readAllLines(Paths.get(fileName),
                                                Charset.forName("CP1251"));
        Set<String> words = new TreeSet<>();
        for (String s: lines ) {
            for (String w : s.split("\\s+")) {
                w = w.replaceAll("\\p{Punct}","");
                words.add(w);
            }
        }
        for (String w: words) {
            System.out.println(w);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
0 голосов
/ 07 марта 2019

Большинство ответов здесь преобразуют String в String Array в соответствии с заданным вопросом.Но, как правило, мы используем список, поэтому более полезным будет -

String dummy = "This is a sample sentence.";
List<String> wordList= Arrays.asList(dummy.split(" "));
0 голосов
/ 09 ноября 2017

Вы можете использовать простой следующий код

String str= "This is a sample sentence.";
String[] words = str.split("[[ ]*|[//.]]");
for(int i=0;i<words.length;i++)
System.out.print(words[i]+" ");
...