2016-10-01 3 views
1

Ich versuche, ein schnelles Programm zu schreiben, das die Anzahl der Leerzeichen in einer eingegebenen Zeichenfolge zählt. Das ist, was ich habe, so weit:Anzahl der Leerstellen in einer eingegebenen Zeichenfolge anzeigen?

import java.util.Scanner; 

public class BlankCharacters 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello, type a sentence. I will then count the number of times you use the SPACE bar."); 

     String s; 
     int i = 0; 
     int SpaceCount = 0; 

     Scanner keyboard = new Scanner(System.in); 
     s = keyboard.nextLine(); 

     while (i != -1) 
     { 
      i = s.indexOf(" "); 
      s = s.replace(" ", "Z"); 
      SpaceCount++; 
     } 

     System.out.println("There are " + SpaceCount + " spaces in your sentence.");  
    } 
} 

Die while-Schleife verwendet zuerst s.indexOf (“„), um den ersten weißen Raum in String s zu finden, ersetzt es mit dem Zeichen Z, füge dann 1 auf den Wert Raumanzahl Dieser Prozess wiederholt sich, bis s.indexOf keinen Leerraum findet, was dazu führt, dass i -1 ist und somit die Schleife stoppt.

Mit anderen Worten, SpaceCount wird jedes Mal um 1 erhöht, wenn ein Leerraum gefunden wird, der dann die Gesamtzahl der Leerräume dem Benutzer anzeigt. Oder sollte es sein ...

Ausgabe: RAUM nicht erhöht, sondern immer 2. Ausdrucken

Wenn ich eintippen waren „eins zwei drei vier fünf“ und ausdrucken String s, würde ich "oneZtwoZthreeZfourZfive" zeigt an, dass vier weiße Leerzeichen vorhanden sind (und dass die while-Schleife viermal ausgeführt wird). Trotzdem bleibt SpaceCount bei 2.

Das Programm läuft gut, aber es zeigt immer eine SpaceCount von 2, auch wenn die Zeichenfolge/Satz mehr als zehn oder zwanzig Wörter ist. Ich erhalte das gleiche Ergebnis, selbst wenn ich eine do while/for-Schleife verwende. Ich war eine Weile bei dieser Sache und bin mir nicht sicher, warum SpaceCount bei 2 feststeckt, wenn der Rest der while-Schleife weiter ausgeführt wird (wie beabsichtigt).

Jede Hilfe wird sehr geschätzt!

+1

Wenn Ihre Zeichenfolge keine abschließenden Leerzeichen hat, meine ich vor und nach der Zeichenfolge, dann können Sie auch 'StringTokenizer tokenizer = new StringTokenizer (str," "); System.out.println ("Gesamtzahl der Leerzeichen sind:" + (tokenizer.countTokens() - 1)); '* in einfachen Worten, wenn Sie die Zeichenfolge schneiden vor dem Zählen für Leerräume * – emotionlessbananas

+0

Ich werde versuchen, die Methoden, die andere erwähnt haben. Ich bin wirklich neugierig, warum sich SpaceCount nicht ändert. Vielen Dank. –

Antwort

3

Ich bin nur wirklich neugierig, warum RAUM nicht ändert

Auf der ersten Iteration der Schleife, ersetzen Sie " " mit nichts (alle Räume) und SpaceCount erhöhen. In der zweiten Iteration finden Sie nichts (-1 bekommen) und ersetzen nichts und dann inkrementieren SpaceCount (2 bekommen).

Anstatt die String zu ändern, würde ich die Zeichen in String iterieren und die Leerzeichen zählen.

Auch per Konvention sollten Variablennamen mit einem Kleinbuchstaben beginnen. Und Sie können den Code übersichtlicher gestalten, indem Sie Ihre Variablen initialisieren, wenn Sie sie deklarieren.

+0

Probier es aus, danke! Noch neu in Java. –

1

Verwenden Sie dies, einfach und unkompliziert. Ersetzen Sie das Leerzeichen durch none und subtrahieren Sie dies durch die tatsächliche Länge der Zeichenfolge. Das sollte die Anzahl der Leerzeichen in der Zeichenfolge geben

Scanner n = new Scanner(System.in); 
n.useDelimiter("\\n"); 
String s = n.next(); 
int spaceCount = s.length() - s.replaceAll(" ", "").length(); 
System.out.println(spaceCount); 
+0

Wusste nicht, am replaceAll war eine Sache, danke! Immer noch sehr neu in Java. –

+0

Ja @RyanA. Führen Sie es aus und überprüfen Sie es. Funktioniert gut. –

+1

Dies ist ein ziemlich teurer Weg, dies zu tun. Es verwendet Regex und und 'StringBuffer', was eine synchronisierte Klasse ist. – Gray

2

Sie gehen den langen Weg über das Zählen der Leerzeichen. Ersetzen Sie diesen Codeblock:

while (i != -1) 
    { 
     i = s.indexOf(" "); 
     s = s.replace(" ", "Z"); 
     SpaceCount++; 
    } 

mit diesem:

char[] chars = s.toCharArray(); 
for(char c : chars){ 
    if(c == ' '){ 
     spaceCount++; 
    } 
} 

Das ist ein bisschen mehr elegant ist und (ich glaube) weniger teuer auszuführen, zu. Hoffe das funktioniert für dich!

+0

@Gray Es ist ein Zufall. Ich weiß nicht, was ich in dieser Situation tun soll ... sollte ich die Antwort löschen oder so? –

+0

Nein. Das ist gut. Manchmal habe ich das Gefühl, dass Leute nur andere Antworten kopieren. Sie könnten es ein bisschen ausbessern und mehr Details hinzufügen, wenn Sie möchten. – Gray

+1

'if (char == '') {' sollte sein 'if (c ==' ') {',' char' ist ein Datentyp. –

Verwandte Themen