2016-09-27 2 views
0

Ich versuche, Benutzereingaben zu nehmen und zu ändern, damit ich die Zeichenfolge ohne irgendwelche Vokale drucke. Ich konnte das mit folgendem Code erfolgreich machen.Drucken der Benutzeroberfläche ohne Vokale Verwenden von Schleifen Ohne replaceAll(); in Java

Scanner in = new Scanner(System.in); 
    System.out.println("Enter a word: "); 
    String word = in.next(); 

    String newString = word.replaceAll("[aeiouAEIOU]","1"); 
    System.out.printf("%s", newString); 

aber ich versuche, den gleichen Effekt zu erhalten, indem eine Schleife ohne das obige Verfahren verwendet wird, replaceAll(). Ich habe es ein anderes Mal versucht, aber in der Logik durcheinander gebracht und neu gestartet. Mein letzter Versuch ist unten und ich kann nicht verstehen, warum es nicht richtig läuft. Ich werde eine Zeichenfolge eingeben und ohne Fehlermeldung wird nichts zurück gedruckt. Das einzige Mal, dass ich es an die Arbeit ist, wenn ich es einzelne Zeichen geben in der Zeichenfolge finden so etwas wie

if(letter.contains("a")) 

Verwendung Wenn die Bedingung wahr gefunden wird, wird es eine Zeichenfolge eines der Druck zurück, jedoch tut dies nicht arbeiten für jede Kombination von Zeichen, nur einzelne. Mein vollständiger Code ist unten.

import java.util.Scanner; 

public class practice 
{ 
    public static void main(String[] args) 
    { 
    Scanner in = new Scanner(System.in); 
    System.out.println("Enter a word: "); 
    String word = in.next(); 
    int i = 0; 

    while (i < word.length()){ 
     String letter = word.substring(i, (i+1)); 
     if(letter.contains("[bcdfghjklmnpqrstvwxyz]")){ 
      System.out.printf("%s",letter); 
     } 
     i++; 
    } 
    } 
} 

bin ich einfach versucht, einen Weg zu finden, um dieses Programm zu beenden nur conditionals, Schleifen, UI, und nur die Methoden length(),() enthält oder indexOf(), charAt() und substring (x, y). Vielen Dank im Voraus für jede Hilfe Ich hoffe, ich habe genug Informationen zur Verfügung gestellt. Hier

einige Beispiel-Ausgabe:

Enter a word: 
Jordan 

Nachdem ich das Wort das Programm eingegeben stoppt.

+0

Der String ' "b"' (zum Beispiel) kann nicht die Zeichenfolge ' "bcdfghjklmnpqrstvwxyz"' . Es ist viel zu kurz. – ajb

+0

Sorry, ich habe die [] rund um die Buchstaben, die ich gesucht habe, bearbeitet und hinzugefügt. Leider immer noch der gleiche Fehler, keine Ausgabe bekommen. Ich habe eine Beispielausgabe in die Frage gestellt, um hoffentlich ein bisschen mehr zu verdeutlichen, danke. –

+0

'contains' verwendet keine regulären Ausdrücke, und die Verwendung von' [] 'erzeugt eine Regex. Nichtsdestotrotz können Sie * das Problem mit 'contains()' lösen, und ich dachte, Sie wären auf dem richtigen Weg, haben aber nur einen kleinen Fehler gemacht. Sie können den Code, den Sie ursprünglich hatten, einfach ändern (ohne '[]'). Denken Sie ein wenig darüber nach. – ajb

Antwort

1

Eine Möglichkeit wäre, die Zeichenfolge in ein Array von Zeichen toCharArray() zu konvertieren und dann verglichen mit einem Fall und fügen Sie eine neue Kette String

String word = in.next(); 
    StringBuilder bul = new StringBuilder(); 
    for (char arg : word.toLowerCase().toCharArray()) { 
     switch(arg) 
     { 
      case 'a': System.out.println("A");break; 
      case 'e': System.out.println("E");break; 
      case 'i': System.out.println("I");break; 
      case 'o': System.out.println("O");break; 
      case 'u': System.out.println("U");break; 
      default: 
       bul.append(arg); 
     } 
    } 
    System.out.println(bul); //String not Vowels 

in Ihrem Code ändern könnte, warum ein ausgewähltes Zeichen mit subtring kann nie enthalten eine so lange Zeichenfolge wie die "[bcdfghjklmnpqrstvwxyz]"

if(letter.contains("[bcdfghjklmnpqrstvwxyz]")){...} 

für

if("[bcdfghjklmnpqrstvwxyz]".contains(letter.toLowerCase())){...} 
+0

Ändern der if-Anweisung funktioniert und danke für die zusätzliche Methode. Kannst du ein bisschen mehr erklären, warum die letztere Methode zum Erstellen der contains() -Methode funktioniert und nicht die, die ich erstellt habe? Ich versuche nur, alles von allem zu lernen, damit ich so viel wie möglich verstehen kann. Vielen Dank. –

+0

Weil ich das getan habe, war das ein Zeichen der Zeichenkette mit 'substring()' und fragte mich, ob dieses Zeichen eine ganze Zeichenkette enthielt. "[Bcdfghjklmpqrstvwxyz]" 'logisch' n' darf keine 'n + n' Zeichen enthalten das liefert immer 'false' zurück, andernfalls würde es stattdessen fragen, ob' n' 'n-1' enthält, was am logischsten und wahrscheinlicher ist,' true' zurückzugeben – DarkFenix

0

Sie können Scanner.useDelimeter(Pattern pattern) mit regex verwenden. Die regex zum Entfernen von Vokal - [^ aeiou] +

Wenn Sie Fall ignorieren wollen, dann dieses Muster verwenden - (? I) [^ aeiou] +.

Und schließlich versuchen, den folgenden Code-Schnipsel -

scanner.useDelimeter(Pattern.compile("[^aeiou]+")); 
0

Wenn Sie sagen,

if(letter.contains("bcdfghjklmnpqrstvwxyz")) 

Code prüft, ob letter die genaue Abfolge von Buchstaben hat bcdfghjklmnpqrstvwxyz

Mit anderen Worten: Es wird nicht überprüft, ob einer dieser Buchstaben einzeln in der String existiert.

Stattdessen könnten Sie so gehen:

for (int i = 0; i < word.length(); i++) { 
     String currentLetter = String.valueOf(word.charAt(i)); 
     if (!currentLetter.matches("a|e|i|o|u")) 
      System.out.print(currentLetter); 
    } 
0

andere Art und Weise zu tun, ist

Scanner s = new Scanner(System.in); 
System.out.print("Enter input String"); 
String input = s.next(); 
StringBuilder sb = new StringBuilder(""); 

for(char c : input.toLowerCase().toCharArray()) 
    if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){} 
    else sb.append(c+"");' 

System.out.println("Given input without vowels : "+sb);