2016-03-26 15 views
3

Ich habe den Code gemacht, so dass es den Benutzer verschiedene Fragen stellt, und wenn der input.trim().isEmpty() eine Nachricht an den Benutzer gegeben wird und den Benutzer bitten, erneut einzugeben. Wenn also der Benutzer nur Leerzeichen schreibt, wird eine Nachricht gegeben. Wenn der Benutzer ein paar Leerzeichen und einige Zeichen angibt, wird er akzeptiert.Entfernen Sie Leerzeichen und Großschreibung Benutzereingabe

Problem im Moment ist, dass ich den ersten Buchstaben des Wortes groß schreiben möchte, aber es funktioniert nicht wirklich. Sagen Sie, wenn die Eingabe des Benutzers mit einem Buchstaben beginnt, wird dieser groß geschrieben. Aber wenn es Whitespace gibt, wird es überhaupt nicht kapitalisieren.

Also, wenn Eingang:

    katka

Ausgang ist:

katka

Ein weiteres Beispiel:

katka

Ausgang ist:

Katka

-Code ist:

String askWork = input.nextLine(); 

String workplace = askWork.trim().substring(0,1).toUpperCase() 
+ askWork.substring(1); 

während (. AskWork.trim() isEmpty()) { String askWork = input.nextLine();

String workplace = askWork.trim().substring(0,1).toUpperCase() 
+ askWork.substring(1); 

}

Ich habe verschiedene Ansätze ausprobiert, aber keinen Erfolg.

+0

"Wenn es Whitespace gibt, wird es überhaupt nicht kapitalisieren." Was Sie wollen, ist die 'trim()' Methode für 'String'. (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#trim--) –

+2

Sie konvertieren das erste Zeichen in Großbuchstaben _und then_ entfernen Sie die Leerzeichen. Glaubst du nicht, dass es viel mehr Sinn machen würde, die Whitespaces zuerst zu entfernen? Dann würden Sie (nicht) ein Leerzeichen in Großbuchstaben konvertieren. – Tom

+0

Ich stimme zu. Ich habe versucht, askWork.trim(). Substring (0,1). ToUpperCase() + askWorkstring (1); Aber ich erhalte Fehler wie Exception im Thread "main" java.lang.StringIndexOutofBoundsException: String-Index außerhalb des Bereichs: 1 ist gegeben, wenn die Eingabe nur Leerzeichen ist. Wenn die Eingabe jedoch Zeichen enthält, funktioniert es ausgezeichnet. Ich verstehe nicht warum. – Ilja

Antwort

3

Die trim() method on String löscht alle führenden und nachfolgenden Leerzeichen. Die getrimmte String muss Ihre neue String werden, so dass alle Indizes, auf die Sie sich danach beziehen, korrekt sind. Sie werden die replaceAll("\\s","") nicht mehr benötigen. Sie benötigen auch Logik, um auf leere Eingabe zu testen. Sie verwenden dafür die isEmpty() method on String. Ich habe ein Spielzeug main() geschrieben, das nach einem Wort fragt und es dann kapitalisiert und druckt, sobald es eins bekommt. Es wird für leere Eingabe testen, Eingabe ohne Zeichen usw.

public static void main(String[] args) throws Exception { 

     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 

     String askWork = ""; 
     while (askWork.isEmpty()) { 
      System.out.println("Enter a word:"); 
      askWork = input.readLine().trim(); 
     } 

     String workPlace = askWork.substring(0,1).toUpperCase() + askWork.substring(1); 

     System.out.println(workPlace); 
    } 
+0

Danke für Ihre Antwort. Ich habe deinen Code ausprobiert und es hat super funktioniert, wenn es Charaktere gab. Wenn die Eingabe nur Leerzeichen hatte, bekam ich einen Fehler: Ausnahme im Thread "main" java.lang.StringIndexOutofBoundsException: String-Index außerhalb des Bereichs: 1. Vielleicht gibt es etwas anderes, das mit meinem Code nicht stimmt? Ich werde meine Frage aktualisieren. – Ilja

+0

Umgeschrieben, um dieses Problem zu beheben. –

+1

Vielen Dank !! – Ilja

0

Sie müssen die Eingabe trimmen, bevor Sie den Inhalt beginnen Manipulation:

String askWork = input.nextLine().trim(); 

String workplace = askWork.substring(0,1).toUpperCase() + askWork.substring(1); 
1

Versuchen Sie Ihre Eingabe Trimmen der Leerzeichen zu entfernen, bevor es zu nutzen versuchen.

String askWork = input.nextLine().trim(); 
String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 

Wenn jedoch die Eingabe nur Leerzeichen, so wird dies, weil in einem IndexOutOfBoundsException Ergebnis nach trim()askWork aufgerufen wird, auf die leere Zeichenfolge gesetzt ("") und Sie dann versuchen, das erste Zeichen der leeren zuzugreifen (Länge 0) Zeichenfolge.

String askWork = input.nextLine().trim(); 
if(askWork.isEmpty()) { 
    // Display error 
    JOptionPane.showMessageDialog(null, "Bad!"); 
else { 
    String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 
    JOptionPane.showMessageDialog(null, "It worked! -- " + capitalized); 
} 
0

Eine andere Lösung ohne Teil:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    String askWork = input.nextLine().trim(); 

    while (askWork.isEmpty()) 
     askWork = input.nextLine().trim(); 

    char[] workChars = askWork.toCharArray(); 
    workChars[0] = workChars[0].toUpperCase(); 

    String workplace = String.valueOf(workChars); 

    // Work with workplace 

    input.close(); 
} 
4

Das Problem wegen Leerzeichen ist als alle Indizes Sie sich beziehen, während in Großbuchstaben umzuwandeln sind nicht genau. Also zuerst trim() die Zeichenfolge, so dass Sie alle führenden und nachfolgenden Leerzeichen löschen und dann groß schreiben können. besser überprüfen leere Zeichenfolge und alle Leerzeichen, um eine Ausnahme zu vermeiden.

String askWork = input.nextLine().trim(); 
String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1)