Ignorieren von Leerzeichen bei der Auszählung String Token
Arbeite ich an einer Hausaufgabe für eine Klasse und ich habe das gelöst haben fast alle, aber bin kämpfen mit einem Teil.
Für den Auftrag, wir sollen ein Programm schreiben, dass zählt die Häufigkeit des Auftretens der Buchstaben in einem gegebenen string und dann drucken Sie eine Karte von Ihnen an der Konsole. Ich habe das Programm geschrieben und es funktioniert fast richtig, aber ich Schaffe es nicht, die anzeigen zu ignorieren whitespace. Es scheint zwei verschiedene Arten von whitespace-Zeichen als auch, eine, ist der Raum zwischen den Wörtern und anderen, dass ich nicht herausfinden.
Ich habe versucht myString.replaceAll(" ", "");
und myString.trim();
zu versuchen und zu beseitigen die Leerzeichen vor Auszählung der Häufigkeit der Buchstaben, aber es zählt immer noch beide Arten von whitespace jedes mal.
Jede Einsicht oder Hilfe ist willkommen. Ich konnte es drehen, wie in diesem, aber ich weiß nicht wie halb assing Projekte. Hier ist der code:
import java.util.*;
public class LetterFrequency {
public static void main( String[] args ) {
Map< String, Integer > myMap = new HashMap< String, Integer >();
createMap( myMap );
displayMap( myMap );
}
private static void createMap( Map< String, Integer > map ) {
Scanner scanner = new Scanner( System.in );
System.out.println( "Enter a string:" );
String input = scanner.nextLine();
System.out.println("String: "+input);
String[] tokens = input.split("");
for ( String token : tokens ) {
String letter = token.toLowerCase();
if ( map.containsKey( letter ) ) {
int count = map.get( letter );
map.put( letter, count + 1 );
}
else
map.put( letter, 1 );
}
}
private static void displayMap( Map< String, Integer > map ) {
Set< String > keys = map.keySet();
TreeSet< String > sortedKeys = new TreeSet< String >( keys );
System.out.println( "\nMap contains:\nKey\t\tValue" );
for ( String key : sortedKeys )
System.out.printf( "%-10s%10s\n", key, map.get( key ) );
System.out.printf(
"\nsize: %d\nisEmpty: %b\n", map.size(), map.isEmpty() );
}
}
- kannst den code sehen, der versucht zu ersetzen, Leerzeichen in der Zeichenfolge
Du musst angemeldet sein, um einen Kommentar abzugeben.
String.replaceAll
funktionieren sollte. Beachten Sie, dassString.replaceAll
gibt eineString
. So verwenden Sie die Zeichenfolge zurück zu führen, der rest Ihrer Berechnung.Zum Beispiel, wenn Sie haben:
myString
wird noch "Hallo Welt"Wollen würde:
Nachdem die
myNewString
haben keine Leerzeichen.Außerdem können Sie vereinfachen Ihren Charakter iteration durch die Verwendung von
Wird dieses Update Ihre zusätzliche "Leerzeichen gezählt werden" - problem. Dies ist, weil, wenn Sie anrufen
myString.split("")
das erste element in der zurückgegebenen Liste ist "" (eine leere Zeichenfolge).Können Sie versuchen
myString.split("\\s+");
um loszuwerden, alle Leerzeichen und split bei der gleichen Zeit.Als @Kshitij Mehta wies darauf hin, stellen Sie sicher, dass Sie mit der return-Wert der Methode. So würde der code wie folgt Aussehen:
Alternative zu
String.replaceAll
: Sie können filtern Sie Ihre Eingabe zu ignorieren, die nicht-alphabetische Zeichen, bevor Sie zu zählen (oder filtern Sie Ihre map in ähnlicher Weise vor dem drucken das Ergebnis). E. g.Alternativ können Sie Charakter.isLetter(char c) Methode, um zu bestimmen, ob ein Charakter wirklich einen Brief.
@Kshitij Mehta ist richtig.
Dein problem ist eine Kombination von nicht entfernen der Leerzeichen durch die Einstellung
Auch Ihre zweite problem war mit
Strings
stattchar
(und Charakter für Ihre Karten) zum speichern der Buchstaben(die Zeichen). Es war nur die unerwartete Verwendung von String nach char gemacht, dass java durchführen unerwartet.Können Sie versuchen, diese. Ich weiß, Sie haben bereits es. Aber ich denke, es wird jemand anderes helfen.