[Java] wie "if(String==array[x][y])" machen?

Diskutiere [Java] wie "if(String==array[x][y])" machen? im Programmierung Forum im Bereich Software Forum; Hi! Ich bastle mir zurzeit in Java ein kleines Übersetzungsprogramm. Habe ein "wb.txt" mit ca 40 Wörtern deutsch<>englisch. Nun will ich in einer...

oele3110

Threadstarter
Dabei seit
17.08.2004
Beiträge
1.152
Alter
32
Ort
Falkensee
Hi!

Ich bastle mir zurzeit in Java ein kleines Übersetzungsprogramm.
Habe ein "wb.txt" mit ca 40 Wörtern deutsch<>englisch.
Nun will ich in einer IF-Abfrage prüfen, ob der eingebenen String (ist zurzeit nur ein Wort, soll später ein Satz werden) gleich dem Array-Inhalt ist:
Das ist meine Methode
Code:
static void translate() {
    eingabetext = eingabetext.toLowerCase();
    System.out.println(eingabetext);
    for (int x = 0; x <= zaehler; x++) {
      if (eingabetext==wb[x][0]) {
        uebertext = wb[x][1];
      }
    }
    System.out.println("Der neue Text: " + uebertext);
  }
"eingabetext" ist der String, der vorher eingelesen wurde.
Dann soll die Schleife durchrattern. "zaehler" ist dabei die Anzahl der Einträge.
Das array wb[x][0] enthält die Wörter (wb[x][0] deutsch, wb[x][1] englisch).
Nun kommt wenn ich das Prog ausführe immer die folgende Fehlermeldung in der Console:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 40
at wbuch.translate(wbuch.java:116)
at wbuch.main(wbuch.java:28)
Zeile 116 ist im Programm die IF-Abfrage.
Wie kann ich dieses Problem nun lösen, sodass er den "eingabetext" mit den Array-Inhalten vergleicht?

Vielen Dank!!

MFG Oele
 

BrandyJr

Dabei seit
02.11.2003
Beiträge
3.707
Alter
39
Ort
Berlin
Kannst du die Elemente des Arrays "per Hand" ansprechen?
Welchen Wert enthält die Variable zaehler?

Probier mal als for-schleife:
for (int x = 0; x < wb.length; x++) {
...
}
Kann sein, dass dein zaehler einfach zu weit zählt. ;)
 

dlonra

Dabei seit
19.10.2005
Beiträge
1.149
Hi,

ich glaub so geht das mit dem if nicht,
da so die String-Referenzen verglichen werden.
Damit man aus der Schleife rauskommt noch das hallo. :)

probier mal:

Code:
bool hallo=false;
for (int x = 0; x < zaehler && hallo==false; x++)
 {
   if(eingabetext.equals(wb[x][0])
     { hallo=true;
       ...
     }
 }

Grüsse
 
Zuletzt bearbeitet:

BrandyJr

Dabei seit
02.11.2003
Beiträge
3.707
Alter
39
Ort
Berlin
ich glaub so geht das mit dem if nicht,
da so die String-Referenzen verglichen werden.
Ja, das dachte ich auch... zumindest hatten wir das in der FH so gelernt (da bin ich mir zu 95% sicher)
Also hab ich das hier einfach mal ausprobiert und siehe da, hat funktioniert. :blink

Allerdings ist diese Art des Vergleichs für ein Übersetzungsprogramm nicht wirklich geeignet, da deine beiden Wörter ja zu 100% übereinstimmen müssen.
Ich würd das eher so machen:
Code:
static void translate() {
	eingabetext = eingabetext.toLowerCase();
	System.out.println(eingabetext);
	for (int x = 0; x < wb.length; x++) {
	    if (wb[x][0].indexOf(eingabetext) != -1) {
	        uebertext = wb[x][1];
	    }
	    System.out.println("Der neue Text: " + uebertext);
	}
}
Dann muss der eingabetext nur irgendwo in wb[x][0] enthalten sein.
 

dlonra

Dabei seit
19.10.2005
Beiträge
1.149
Hi BrandyJr,

ich komm eher aus der c++ Ecke.
Hab mal ein Java Grundkursbuch (Markt+Technik) durch gemacht.
Da war der JBuilder6 dabei, wenn man da z.B eine Variable schreibt und ein
Punkt setzt kommen automatisch die Hilfe. Ich kenne das nur so, dann hat
man eine Auswahl an Funktionen die die Klasse bietet. Wie hier z.B die String-Klasse. Wenn man nicht weis was die ausgewählte Funktion macht drückt man F1.
C++ unterscheidet sich nicht sehr von Java (vom Syntax her).

Ganz ehrlich hab ich nur schnell im Internet geschaut: string vergleich java :D


Grüsse

*edit* hier gibts eine Methoden Auswahl
http://www.dpunkt.de/java/Referenz/Das_Paket_java.lang/68.html

IndexOf
equals
und noch mehr

Deine Funktion sagt richtig wen das stimmt
Schneeman == Schnee
meine nicht

Die könnte auch interessant sein

equalsIgnoreCase

1000 Wege führen zum Ziel :)
 
Zuletzt bearbeitet:

oele3110

Threadstarter
Dabei seit
17.08.2004
Beiträge
1.152
Alter
32
Ort
Falkensee
Hi!!!

Vielen Dank! Der Tip von BrandyJr hat wunderbar geklappt!!!

Noch eine Frage:

Ist es irgendwie möglich in einem String die Wörter zu zählen? (Aber ich glaube das geht nicht). Ich würde den String zerhacken und die Leerzeichen zählen, oder habt ihr eine andere Idee?

Danke !!

MFG Oele
 

dlonra

Dabei seit
19.10.2005
Beiträge
1.149
Hi,

ich hab hier kein Java :)
kannst mal dieses hier ausprobieren :unsure

Code:
int anzahl = hallo.length; //hallo ist dein Satz
int leer    = 0;

for(int x=0; x<anzahl; x++)
 {
  if(hallo.toCharArray()[x]==' ') leer=leer+1; //' ' Leerzeichen oder ASCII
                                                          // vom Leerzeichen
 }

Grüsse
 

BrandyJr

Dabei seit
02.11.2003
Beiträge
3.707
Alter
39
Ort
Berlin
Nein, gibt da IMHO keine wirklich "effektive" Methode für.
Musst nur bedenken, das es mehrere Leerzeichen hintereinander geben kann.
Also ist die Idee mit dem Zählen der Leerzeichen nicht sone gute Idee.
Code:
String var = "mein    string der hat 3   ecken und neun 	wörter";
int zaehlvar = 0;
boolean foundSpace = false;
for (int i=0; i<var.length(); i++) {
	if (Character.isLetterOrDigit(var.charAt(i)) && !foundSpace) {
		foundSpace = true;
		zaehlvar++;
	} else if (Character.isWhitespace(var.charAt(i)) && foundSpace)	{
		foundSpace = false;
	}
}
System.out.println("String enthält " + zaehlvar + " Wörter");
 
Thema:

[Java] wie "if(String==array[x][y])" machen?

[Java] wie "if(String==array[x][y])" machen? - Ähnliche Themen

[gelöst][Java] String mit Leerzeichen vergleichen klappt nicht: Hi! Ich habe ein kleines Problem in meinem Java-Prog. Ich möchte einen Text "verschlüsseln". Das funzt auch, nur die Leerzeichen nimmt er nicht...
Wie man/frau ein (Batch-)Programm schreibt: Hi Die Systemfunktionen des Kommandointerpreters sind hilfreich und nuetzlich fuer alle moeglichen Aufgaben, aber leider schlecht bis gar nicht...
Der Dau V 2.10: 1994 (Duemmster Anzunehmender User) Also der Cousin eines Freundes arbeitet wirklich in der Serviceabteilung bei Nixdorf...

Sucheingaben

content

,

if string array java

Oben