2016-10-01 6 views
3

Ich muss ein Java-Programm schreiben, das eine Zeichenfolge liest und bestimmt, ob es diese beiden Buchstaben gibt: den Kleinbuchstaben "e" oder "d".Lesen Sie 2 Buchstaben in einer Zeichenfolge mit JAVA

Das ist was ich bisher geschrieben habe! irgendwelche Ideen, warum das nicht funktioniert?

class ex2 { 
    public static void main(String[] args) { 
     //boolean arg1; 
     char e = 'e'; 
     char d = 'd'; 
     String x = "This is my test"; 
     char[] xh = new char[x.length()]; 
     for(int i=0; i<= x.length();i++) { 
      if (xh[i] == e || xh[i] == d) { 
       // arg1 = true; 
       System.out.println("Correct"); // Display he string 
      } else { 
       //arg1 = false; 
       System.out.println("Wrong"); 
      } 
     } 

    } 
} 
+1

1. Sie bekommen ArrayOutOfBoundsException als for-Schleife sollte sollte nicht ausführen für die Gleichheitsprüfung 2. Ihr xh-Array ist leer – Gaur93

+0

Ich mache ... nachdem ich alle "falsch" gedruckt habe, bekomme ich diese Ausnahme auch .. irgendwelche Ideen? – noel293

+2

Verwenden Sie char xh [] = x.toCharArray(); – Gaur93

Antwort

0

dies ist die einfache Lösung, wenn Sie es

verwenden möchten

HINWEIS von Kommentaren, müssen Sie Konto behalten, dass , wenn es keine e und d ist, diese zweimal auf den Inhalt des String iterieren wird aber nicht der Fall zweiten Code als zweites Beispiel für jede

nur kurze Form ist
String str = "ewithd"; 
     if (str.contains("e") || str.contains("d")) { 
      System.out.println("sucess"); 
     } else 
      System.out.println("fail"); 

, wenn Sie mit Array gehen wollen, dann können Sie foreach() verwenden zu

char[] ch = str.toCharArray(); 
     for (char c : ch) { 
      if (c == 'e' || c == 'd') { 
       System.out.println("success"); 
      else 
       System.out.println("fail"); 
      } 
     } 
+0

lesen müssen, wenn kein' e' und 'd', dies wird zweimal auf den Inhalt der' String' iterieren –

+0

@nicolasFilotto danke für das Aufzeigen, dass ich auch Nebenwirkungen setzen werde .. :) –

1

Zuerst haben Sie eine ArrayOutOfBound Ausnahme, weil Sie kurz vor der Länge stoppen müssen, das heißt i<x.length().

Jetzt ist Ihr Problem, dass Sie gegen ein Array von char, die voller null Zeichen ist testen. Sie müssen mit der Zeichenfolge testen:

if (x.charAt(i) == e || x.charAt(i) == d) { 
1

Sie nie etwas in Ihrem Array. char[] xh = new char[x.length()]; deklariert einfach ein Array mit der Länge x, es setzt die Elemente xh nicht auf die Elemente x. Verwenden Sie stattdessen:

char[] xh = x.toCharArray(); 

Sie müssen auch auf der Schleife ändern:

for(int i=0; i < x.length(); i++) { 

die außerhalb der Grenzen Ausnahme vermeiden Sie gerade sehen sind.

+0

Der Aufruf von 'toCharArray()' wird funktionieren, aber es ist nicht der beste Ansatz, da hier ein neues Zeichenfeld erstellt wird, das hier nutzlos ist, da wir nur den Inhalt des 'String' –

1

Ihr Hauptproblem ist die Tatsache, dass Sie nicht richtig, hier die char Ihrer String iterieren ist der beste Weg, es zu tun:

for (int i = 0, length = x.length(); i < length; i++) { 
    char c = x.charAt(i); 
    ... 
} 

Unter der Annahme, dass Sie verwenden Java 8, Sie verlassen konnte auf der Stream API das gleiche wie als nächstes zu tun:

boolean result = x.chars().anyMatch(c -> c == 'e' || c == 'd'); 
Verwandte Themen