2016-04-09 8 views
0

Ich muss eine Häufigkeitstabelle erstellen, die Strings in einem Array oder ArrayList verwendet, und verwendet die intern -Methode, die einen String zurückgibt. Ich hatte gehofft, etwas wie das Folgende zu tun, aber es hat nicht funktioniert.Testing String Pool

Ich bestätige, dass es bessere Möglichkeiten gibt, Häufigkeitstabellen zu erstellen, aber die Aufgabenbeschränkungen sind bindend.

Ok, herausgegeben von den Kommentaren zu urteilen, ist dies nicht hilfreich. Also lass uns zurück verfolgen.

Ich habe die Zeichenfolgen aus Textdateien importiert, Sonderzeichen entfernt, den Text in Kleinbuchstaben konvertiert und dann die einzelnen Wörter in einem ArrayList gespeichert. Ich habe Duplikate desselben Wortes erhalten, weil ich versuche, eine Häufigkeitstabelle der Wörter zu erstellen. Meine Aufgabe ist es, die string intern Methode irgendwo in meinem Code zu verwenden, um diesen Prozess schneller zu machen!

Wie in diesem Forum häufig erwähnt wurde, und jede andere Ressource, die ich online finden kann, kann die String intern Methode verwendet werden, um die Gleichheit von zwei String-Objektverweise mit dem logischen Operator “==” zu testen. Zum Beispiel:

String s1 = new String("first").intern(); 
String s2 = "first"; 
String s3 = new String("first"); 

System.out.println(s1 == s2); //prints true 
System.out.println(s2 == s3); //prints false 
System.out.println(s1 == s3); //print false 

Aber ich habe es mit Zehntausenden von Wörtern zu tun! Wie erstelle ich einen Prozess, der so viele Objektreferenzen für eine interne Zeichenfolge erstellt und dann jede mit dem String-Pool testet, sodass ich weiß, ob die Worthäufigkeit um eins erhöht werden soll?

+2

Warum möchten Sie 'intern()' Methode verwenden? –

+0

Was meinst du mit funktioniert nicht? Das einzige, was ich sehe, könnte ein mögliches Problem sein, wenn Sie die Daten in die Karte setzen, die Sie mit myMap.put (myArray [i], myMap.get (myArray [i]) + 1) abrufen passiert vor dem Setzen, so dass Sie möglicherweise eine Null bei diesem Aufruf zurückgeben, was zu null + 1 führt. – Jere

+1

Verwenden Sie 'myMap.containsKey (myArray [i])' anstelle von 'myArray [i] == new String (myArray [i]) .intern() 'in if Bedingung – Rehman

Antwort

0

Wie andere Leute bemerkt haben, ist dies nicht der Ansatz, den Sie in einem Produktionssystem verwenden möchten. Der Grund dafür, dass Sie sich nicht wie erwartet verhalten, liegt darin, dass Sie nicht intern arbeiten, wenn Sie myarray [i] in die Map einfügen, damit es bei nachfolgenden Iterationen nicht mit der intern gespeicherten Zeichenfolge übereinstimmt.