2017-10-23 1 views
2

Ich habe versucht, ein Programm in Java zu erstellen, das jedes Wort ausgibt, das in einer Zeichenfolge gefunden wird, und die Anzahl, wie oft sie angezeigt werden. Ich habe versucht, dies zu tun, ohne irgendwelche Arrays oder hashmap zu verwenden, und indem ich nur String-Manipulation Methoden und String-Tokenizer, aber ich kann nicht scheinen, meinen Kopf um die Logik zu wickeln.Wie erstellt man einen Worthäufigkeitszähler in Java ohne hashmap oder Arrays?

Hier ist was ich bisher habe.

Scanner sc=new Scanner(System.in); 
String input=""; 
int count=1; 
String word=""; 

System.out.println("Enter your paragraph."); 
input=sc.nextLine(); 

StringTokenizer st=new StringTokenizer(input); 

while(st.hasMoreTokens()){ 
    word=st.nextToken(); 
    while(st.hasMoreTokens()){ 
     if(st.nextToken()==word){ 
      count++; 
     } 
    } 
    System.out.println(word+": "+count); 
    input=input.replaceAll(currentToken," ") 
    count=1 
} 

Der Ausgang, den ich gerade empfange, ist (das erste eingegebene Wort) = 0.

Irgendwelche Hilfe oder Ratschläge mit diesem oder irgendetwas, um mich in die richtige Richtung zu führen?

+0

Warum die Einschränkung gegen Hashmaps? – coolioasjulio

+3

Javadoc von ['StringTokenizer'] (https://docs.oracle.com/javase/9/docs/api/java/util/StringTokenizer.html) seit Java 1.4 (2002): *' StringTokenizer' ist ein ** Legacy-Klasse **, die aus Kompatibilitätsgründen beibehalten wird, obwohl ** in neuem Code ** davon abgeraten wird. Es wird empfohlen, dass jemand, der diese Funktionalität sucht, stattdessen die 'Split'-Methode von' String' oder das 'java.util.regex'-Paket verwendet. * --- Sagen Sie Ihrem Lehrer, dass er dieses 15 Jahre alte Lehrmaterial wegwerfen soll. Es ist an der Zeit, Material aus diesem Jahrzehnt zu bekommen. – Andreas

+0

@coolioasjulio Ich bin in der Schule und habe noch nichts über Hashmaps gelernt. Ich versuche das herauszufinden, indem ich nur grundlegendes Java-Wissen verwende. – fizzle

Antwort

2

Sie sind ganz in der Nähe. Aber das 0 als Ergebnis stimmt nicht mit Ihrem geposteten Code überein, es ist 1, aber auch wenn es mehr Vorkommen gibt. Das liegt daran, dass Sie == anstelle von .equals() im if verwendet haben.

Und am Ende der Schleife wurde der Tokenizer durch die innere Schleife entleert, so dass Sie einen neuen initialisieren sollten, besonders nachdem Sie die input Zeichenkette bereits geändert haben.

StringTokenizer st = new StringTokenizer(input); 

while (st.hasMoreTokens()) { 
    word = st.nextToken(); 

    while (st.hasMoreTokens()) { 
    if (st.nextToken().equals(word)) { 
     count++; 
    } 
    } 
    System.out.println(word + ": " + count); 
    input = input.replaceAll(word, ""); 
    count = 1; 
    st = new StringTokenizer(input); 
} 

Hinweis: Als Andreas und coolioasjulio erwähnt die abgeraten Verwendung von StringTokenizer ist (mehr darüber here).

+0

Ich dachte, ich müsste den String Tokenizer reinitialisieren! Vielen Dank! – fizzle

+0

Wenn ich darf ... '.equals()'> '==' –

+0

Es sollte angemerkt werden, dass 'StringTokenizer' eine Legacy-Klasse ist und wirklich nicht verwendet werden sollte. Sie müssen es möglicherweise für diese Aufgabe verwenden, aber denken Sie daran. – coolioasjulio

Verwandte Themen