it-swarm.com.de

Konvertieren einer Satzzeichenfolge in ein String-Array von Wörtern in Java

Ich brauche mein Java-Programm, um eine Zeichenfolge wie:

"This is a sample sentence."

und verwandeln es in ein String-Array wie:

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

Keine Punkte oder Interpunktion (vorzugsweise). Die Eingabe der Zeichenkette ist übrigens immer ein Satz.

Gibt es eine einfache Möglichkeit, dies zu tun, die ich nicht sehe? Oder müssen wir wirklich viel nach Leerzeichen suchen und neue Zeichenfolgen aus den Bereichen zwischen den Leerzeichen (die Wörter sind) erstellen?

35
AnimatedRNG

String.split () wird das tun, was Sie wollen. Möglicherweise müssen Sie dann die Wörter durchlaufen, um die Interpunktion herauszuziehen.

Zum Beispiel:

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]", "");
}
52
Adam Batkin

Jetzt kann dies nur mit split erreicht werden, da es regex braucht:

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

dies gibt Wörter als: {"this","is","a","sample","sentence", "s"}

\\W+ stimmt mit allen nicht alphabetischen Zeichen überein, die ein- oder mehrmals vorkommen. Sie müssen also nicht ersetzt werden. Sie können auch andere Muster überprüfen.

15
Ganapathi.D

Sie können BreakIterator.getWordInstance verwenden, um alle Wörter in einer Zeichenfolge zu finden.

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;
}

Prüfung:

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))"));
}

Ausgabe:

[A, PT, CR, M0RT, BOUSG, SABN, NTE, TR, GB, G, Rand, MIN, XXX, YY, ABC]
12
Ninh Pham

Sie können auch BreakIterator.getWordInstance verwenden.

11
finnw

Sie können Ihren String einfach mit diesem regular - Ausdruck aufteilen

String l = "sofia, malgré tout aimait : la laitue et le choux !" <br/>
l.split("[[ ]*|[,]*|[\\.]*|[:]*|[/]*|[!]*|[?]*|[+]*]+");
7
sofia

Die einfachste und beste Antwort, die ich mir vorstellen kann, ist die folgende Methode, die in der Java-Zeichenfolge definiert ist:

String[] split(String regex)

Und machen Sie einfach "Dies ist ein Beispielsatz" .split (""). Da es sich um einen regulären Ausdruck handelt, können Sie auch kompliziertere Splits ausführen, z.

5
James

Versuchen Sie es mit folgendem:

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

Dadurch wird an jedem Index des String-Arrays ein Teilstring erstellt, der den Abstand als Aufteilungspunkt verwendet. 

5
Dan Williams

Verwenden Sie string.replace(".", "").replace(",", "").replace("?", "").replace("!","").split(' '), um Ihren Code in ein Array ohne Punkte, Kommas, Fragezeichen oder Ausrufezeichen aufzuteilen. Sie können beliebig viele Anrufe zum Ersetzen hinzufügen oder entfernen.

4
helloworld922

Versuche dies:

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] + "\"");
}
3
Mat B.

Es folgt ein Code-Snippet, das einen Satz in Word aufteilt und auch die Anzahl angibt.

 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());         
    }
    }

}
2
Eagle

string.replaceAll () funktioniert nicht korrekt mit einem anderen als dem vordefinierten Gebietsschema. Zumindest in jdk7u10 .

In diesem Beispiel wird ein Word-Wörterbuch aus einer Textdatei mit dem kyrillischen Windows-Zeichensatz CP1251 erstellt

    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();
    }
1
corvinusz

Eine andere Möglichkeit, dies zu tun, ist StringTokenizer . Ex: -

 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
Nikunj Gupta

Ich habe diese Antwort schon irgendwo geschrieben, ich werde sie hier wieder tun. Diese Version verwendet keine eingebauten Hauptmethoden. Sie haben das Char-Array erhalten, konvertieren Sie es in einen String. Ich hoffe es hilft!

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
Sujal Mandal

Die meisten Antworten hier konvertieren String in String Array als die gestellte Frage. Aber im Allgemeinen verwenden wir List, also wird es nützlicher sein -

String dummy = "This is a sample sentence.";
List<String> wordList= Arrays.asList(dummy.split(" "));
0
sapy

Sie können einfach folgenden Code verwenden

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