Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
für eine Aufgabe muss ich ein eingegebenes Wort nach von mir bestimmten Inhalten durchsuchen lassen.
Zum Beispiel soll nachgeguckt werden, ob die Zahlen 1 - 9 enthalten sind bzw Buchstaben von a-z.
Bin inzwischen so weit gekommen:
Java:
import javax.swing.JOptionPane;
public class ContentSearch {
public static void main(String[] args) {
String Entry = JOptionPane.showInputDialog("Bitte Eingabe machen");
String Wert = "";
if (Entry.contains("1,2,3,4,5,6,7,8,9")){
Wert = "Alle Zahlen von 1 bis 9 enthalten";
}
JOptionPane.showMessageDialog(null, Wert);
}
Die Frage ist nun, wie der Inhalt in den Klammern denn überhaupt geschrieben werden sollen ???:L :bahnhof: Ich glaube ich mache das dort irgendwie Falsch. Wenn ich alle Zahlen eingebe gibt er mir kein Wert.
Du könntest anstelle contains -> matches verwenden mit einem entsprechenden Regex z.B. [1-9] oder [a-zA-Z] (evtl mit .* davor + dahinter, je nachdem wie der eigentliche String auszusehen hat..)
Das liefert nur true, wenn der String die gesamte Zeichenkette "1,2,3,4,5,6,7,8,9" enthält. Inklusive Kommas, und auch in genau dieser Reihenfolge. Also offensichtlich nicht das, was du brauchst. Du musst jede Zahl einzeln prüfen. Mein Vorschlag:
Analog kannst du das noch für die Buchstaben machen. Hier kannst du aber gleich ne for-Schleife über chars machen, siehe ASCII Tabelle für Zuordnung der Buchstaben zu int-Werten). Kleines 'a' ist zB 97 soweit ich weiß.
PS: evtl geht's noch viel einfacher mit regulären Ausdrücken, aber damit bin ich persönlich nicht so bewandert..
Der Ausdruck muss schon ein String sein. Also in Anführungsstriche packen:
Java:
Entry.matches("[a-zA-Z]")
Allerdings heißt das nicht, dass alle Buchstaben vorhanden sind, sondern dass genau ein einziger Buchstabe vorhanden ist. Mach dich erstmal mit der Syntax von solchen Ausdrücken vertraut: Pattern (Java Platform SE 6)
Naja, da fehlen die Anführungszeichen vom String, wusste nicht dass ich das extra noch erwähnen muss
Und ich denke auch, dass der Regex so nicht passen wird, wie sieht denn der eingegebene String aus? Kann der irgendwie aussehen und da soll nur geguckt werden ob da irgendwo eine Zahl oder Buchstabe enthalten ist oder wie? Denn da würde da so einfach nicht gehen
@era Ich hab das so verstanden dass der übergebene String alle Ziffern 1-9 enthalten muss (Reihenfolge und andere Inhalte wohl egal). Ich glaub fast da ist meine Version noch leichter als mit Regex. Aber ich lass mich gern eines besseren belehren, ich hab mit RegEx wie gesagt nich so die Übung.
PS: bzw. alle Buchstaben, irgendwie nimmt der TO mal ein Beispiel mit Ziffern, mal eins mit Buchstaben..
@era Ich hab das so verstanden dass der übergebene String alle Ziffern 1-9 enthalten muss (Reihenfolge und andere Inhalte wohl egal). Ich glaub fast da ist meine Version noch leichter als mit Regex. Aber ich lass mich gern eines besseren belehren, ich hab mit RegEx wie gesagt nich so die Übung.
PS: bzw. alle Buchstaben, irgendwie nimmt der TO mal ein Beispiel mit Ziffern, mal eins mit Buchstaben..
Aber damit prüfst du jetzt doch nur ob 9 Ziffern zwischen 1 und 9 vorkommen, aber nicht welche. Er will prüfen, ob der String tatsächlich jede der Ziffern von 1 bis 9 enthält. Deine Methode würd doch auch true liefern wenn der String "111222333" enthält. Oder nicht? Kann sein dass ich den replaceAll-Aufrufe falsch verstehe.
@eRaaaa: ja bin sehr neu in dieser Java-Materie. Bin grad dabei mich da durchzuschlagen. Viele Kleinigkeiten vergisst man schnell. Aber durch Fehler lernt man ja bekanntlich .
Und ja, es soll nachgeguckt werden ob z.B. alle Buchstaben enthalten sind.
Bsp.: "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern" hier sind alle Buchstaben a bis z enthalten ob groß oder klein.
Um nicht zwischen Groß- und Kleinschreibung zu unterscheiden müsstest du vor der Schleife dann noch den zu prüfenden String auf lower-case only runtertrimmen:
So, da ich eben mit meinem Code auf die Nase gefallen bin, muss ich jetzt nochmal Klugschei***
Man kann btw auch char in einer for Schleife direkt benutzen, dann muss man a) nicht die ASCII Tabelle auswendig können, b) somit keine magic numbers , c) kein extra cast notwendig !
Aber ein Regex oder anderer Einzeiler ist mir auch noch nicht eingefallen :noe:
Man kann btw auch char in einer for Schleife direkt benutzen, dann muss man a) nicht die ASCII Tabelle auswendig können, b) somit keine magic numbers , c) kein extra cast notwendig !
@hdi: bin grad am Bauklötze staunen... :applaus: die ASCII-Tabelle haben wir durchgenommen. Könnte ich also ruhigen Herzens versuchen zu erklären.
Dennoch habe ich eine Fehlermeldung von Netbeans (im // Kommentar):
@eRaaaa: meinst du eine for schleife wäre dann einfacher zu erklären? ich kann mit der for schleife sowas anstellen:
Java:
public class Schleife
{
public static void main(String[] args)
{
for(int i=0; i<10; i++)
System.out.print(i);
}
}
ich weiß es ist eher ernüchternd. dennoch kann ichs :rtfm:
aber wie befehle ich, dass es nachguckt ob von mir bestimmte inhalte (buchstaben a bis z) vorhanden sind? wie ginge das denn für buchstaben?... ???:L
Naja, eig. genau so (da jetzt eh schon viel zu viel Code da ist)
Java:
String s = "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern".toLowerCase();
for (int i = 'a'; i <= 'z'; i++) {
if(s.indexOf(i) == -1){
System.out.println("Buchstabe "+(char)i+" ist nicht im String enthalten");
break;
}
}
@hdi: contains geht trotzdem (ausser du machst daraus nen String z.B. ) nicht und length-> length()
@eRaaaa: oh klar das ist ja natürlich sehr einleuchtend.
bloß will ich kein printoutln benutzen...
Java:
public static void main(String[] args) {
String Entry = JOptionPane.showInputDialog("Bitte Eintrag machen").toLowerCase();
for (int i = 'a'; i <= 'z'; i++) {
if(Entry.indexOf(i) == -1){
JOptionPane.showMessageDialog(null,"Buchstabe "+(char)i+" ist nicht im String enthalten");
break;
}
}
public static void main(String[] args) {
String Entry = JOptionPane.showInputDialog("Bitte Eintrag machen").toLowerCase();
for (int i = 'a'; i <= 'z'; i++) {
if(Entry.indexOf(i) == -1){
JOptionPane.showMessageDialog(null,"Buchstabe "+(char)i+" ist nicht im String enthalten");
break;
}
}
public static void main(String[] args) {
String Entry = JOptionPane.showInputDialog("Bitte Eintrag machen").toLowerCase();
for (int i = 'a'; i <= 'z'; i++) {
if(Entry.indexOf(i) == -1){
JOptionPane.showMessageDialog(null,"Buchstabe "+(char)i+" ist nicht im String enthalten");
}else JOptionPane.showMessageDialog(null, "alle Buchstaben enthalten");
break;
}
am Anfang klappt das ja gut aber nach einigen Run´s mit dem Eintrag "a" sagt er mir, dass alle Buchtsaben enthalten sind.
Also sobald ein Eintrag gemacht wird, der den Buchstaben a enthält, kommt eine falsche Lösung raus.
Wobei das in den ersten Durchgängen funktioniert....
Das else ist falsch. Da kommst du ja hin sobald der erste Buchstabe erfolgreich gefunden wurde. Das heißt aber nicht das ALLE drin sind.
Außerdem glaube ich vermischt du hier char und int. Bin mir nicht sicher ob das das Gewünschte tut, da der Wert je nach deklariertem Datentyp unterschiedlich interpretiert wird. Und ich weiß nicht genau was indexOf(int) tut. Mach aus dem "int i" in der for-Schleife lieber ein "char i".
Es gibt nur zwei Fälle, in denen deine Logik korrekt zu sein scheint:
1) Der String enthält alle Buchstaben, und genau diese Information wird angezeigt
2) Der String enthält KEINEN Buchstaben.