Muster erkennen

Yasemin bahar

Mitglied
Hallo!
Ich habe eine Aufgabe bekommen, habe versucht die zu lösen, aber komme leider nicht mehr voran.
Die Aufgabe besagt, dass zwei Texte in String gegeben sind z.B String Text= "bananeananas" und String Muster= "ana". Nun muss ich dafür sorgen, dass mein Programm erkennt, dass das Wort in dem Text enthalten ist. Zudem muss ich ein Ergebnisarray angeben, welches alle gefundenen Musterbeginne sammelt und in einem Array zurückgibt.
Beispiel: bananeananas, ana -> [1,6,8]
Ich wäre dankbar, wenn ihr mir helfen würdet!
LG
(Im Anhang befindet sich mein bisheriger Java Code)
 

Anhänge

  • Muster.java
    912 Bytes · Aufrufe: 8

mrBrown

Super-Moderator
Mitarbeiter
Kannst du es denn "per Hand" lösen? Also, was würdest du machen, wenn du ohne zu porgrammieren sagen sollst, ob und an welchen Stellen "ana" in "bananeananas" vor kommt?


Code bitte immer direkt als Code in Code-Tags posten, nicht als Datei anhängen (außer die Länge erfordert es, aber dann ist es üblicherweise sowieso zu viel für eine Frage).
 

Neumi5694

Top Contributor
Die Idee ist grundsätzlich absolut in Ordnung.
Zwei Fragen zur Aufgabe:

1. Würde "anana" den Begriff "ana" laut Aufgabe zwei mal enthalten oder nur einmal? Davon hängt ab, ob du beim Suchen immer nur um index +1 weitergehst, oder ob du - falls ein Muster gefunden wird - eine gewisse Anzahl an Zeichen (entsprechend der Musterlänge) überspringst.

2. Dürft ihr auch höhere Funktionen verwenden oder muss das Ganze auf chars basieren? Für die Suche gibt's nämlich eine recht nette vorgefertigte Hilfsfunktion.

Tip: Da du nicht im Vorfeld weißt, wie oft das Muster im Wort vorkommt, solltest du deine Teilergebnisse (Indizes, an denen das Muster gefunden wurde) erst mal in einer Liste speichern. Die kannst du später immer noch in ein Array umwandeln.
 

Yasemin bahar

Mitglied
Zu der ersten Frage: Du liegst richtig, dass Wort ana liegt dann zweimal vor und darf dann dementsprechend nicht einfach die Länge des Musters überspringen.
Zu der zweiten Frage: Das ist ne gute Frage, in der Aufgabenstellung ist keine konkrete Bedingung gegeben, also könnte man theoretisch beide Variante verwenden.
Danke für den Tipp, vielleicht hilft mir dies weiter, ich versuche es mal!
 

Yasemin bahar

Mitglied
[CODE lang="java" title="Muster"] public static void main(String[] args){

//String dekladieren
String text = "bananeananas";
String muster = "ana";
System.out.println(findPattern(text, muster));

}
private static int[] findPattern(String text, String pattern) {
int[] arr = new int [5];
for(int i=0;i<= text.length();i++) {
int u =text.indexOf(pattern);
arr = text.indexOf(pattern);
return arr;

}
return arr;



}
}[/CODE]

Ich habe es mit dem indexOf versucht und tatsächlich bekomme ich die Stelle eins raus. Allerdings habe ich das Problem, dass ich nicht weis wie ich entlang meinem String fortfahren muss und den Wert in Array übergebe. (Wir müssen eine Methode schreiben, deshalb ist meinem Code eine Methode)
 
K

kneitzel

Gast
Und ich würde empfehlen, sich immer den Algorithmus richtig vorzustellen und aussagekräftige Namen zu verwenden.

Was ist in deinem i? Was ist das u? Und was soll in den jeweiligen Arrays sein?

Und dann immer erst genau überlegen, was getan werden soll. Vergiss dabei Java ... sag es erst einmal in eigenen Worten!

Um es an Deinem Code deutlich zu machen:
a) dein i ist dubios. Du hast da ein Array arr, das wohl das Ergebnis e ärgsten soll ... Und dann hast du eine Schleife die über etwas anderes zählt und somit wäre eine IndexOutOfBoundsException vorprogrammiert ...
b) aber die Schleife ist ja so zum Glück keine Schleife. Das ist ja ein zähle bis ... Und bricht direkt sofort ab (Return in der Schleife).

Daher: überlege Dir, wie Du es einem anderen erläutern kannst ... der weiss nichts ... ich habe also zwei Worte auf einem Zettel und soll fest stellen, wie oft das zweite im ersten ist...

Dabei ein Tipp: bleibe ruhig auf einem hohen Level. Es ist also in Ordnung zu sagen: Prüfe ob Zahl x in dem Array mit Zahlen y[] enthalten ist.
Und die grobe Anweisung verfeinert du dann separat. Das wäre dann bei der Umsetzung z.B. eine Methode. So hast du dann eine Unterteilung eines komplexen Sachverhaltes in viele kleine und du erhält einfach lesbaren Code.
 

Neumi5694

Top Contributor
Onixee hat den wichtigsten Teil der Lösung eigentlich eh schon geschrieben. Bei indexOf kannst du ein Offset mitgeben, ab welchem gesucht werden muss. Wenn du z.B. an Index 2 ein Muster gefunden hast, suchst du danach ab Index 3 weiter.

Du machst das so lange, bis kein Muster mehr gefunden wird (Rückgabewert -1) oder das nächste Offset zu hoch werden würde (außerhalb des Strings).

Was die Rückgabe angeht, hast du übrigens einen Denkfehler drin: du gehst davon aus, dass es 5 Rückgabewerte gibt. Aber sind es denn garantiert 5? Können es weniger sein? Dann werden die hinteren Felder mit 0 befüllt sein. Können es mehr sein? Dann ist das Array zu klein.
Wenn es eine unbestimmte Anzahl an Werten gibt, bietet sich das Arbeiten mit einer Liste an (die kannst du später immer noch umwandeln).

Ich empfehle, die Rückgabe erst mal zu ignorieren, lass die gefundenen Indizes einfach ins Log ausgeben. Sobald rauskommt, was du haben willst, machst du dir Gedanken darüber, wie man das Rückgabearray erstellt. Ein Problem nach dem anderen.
 

Yasemin bahar

Mitglied
[CODE lang="java" title="Muster" highlight="14"]public class Muster1 {
public static void main(String[] args){

//String dekladieren
String text = "bananeananas";
String muster = "ana";
int[] arr = new int [text.length()];
if(text == muster ) {
System.out.println("Es handelt sich um das gleiche Wort!");
} else if(text != muster) {
for(int i=0;i<text.length();i++) {

System.out.print((arr=text.indexOf(muster,i))+ " ");
// Ausgabe 1 1 6 6 6 6 6 8 8 -1 -1 -1
}


}

}

}
[/CODE]
Habe jetzt mit den ganzen Tipps weitergearbeitet und habe nun ein kleines Problem. Die Werte kommen mehrfach vor. Wie kann ich das verhindern?
 
K

kneitzel

Gast
Hast Du dir denn einmal genau überlegt, wie dieses indexOf funktioniert?

Stell Dir das einfach einmal bildlich vor: Du stehst am Anfang eines Weges, der Markierungen an der Seite hat und auf dem Münzen liegen. Und dann fragst Du an Markierung 0: Wo liegt das nächste Geldstück? -> An Markierung 7
Ok, Du merkst Dir die Markierung 7. Und gehst eine Markierung weiter (bist damit auf 1) und fragst: "Wo liegt das nächste Geldstück?" -> An Markierung 7 ...

Wenn Du das Geldstück auf der 7 gefunden hast: Ab wo suchst Du denn dann weiter nach Geldstücken?
 

Neumi5694

Top Contributor
Mit anderen Worten: Schmeiß die for-to Schleife raus und asuche immer ab dem letzten gefundenen Index +1.

ps: "text == muster" = ganz schlechte Idee
("a"+"b") == "ab" wird false ergeben, obwohl die Texte gleich sind.
Strings und andere Objekte werden mit equals verglichen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 Wie dieses Muster am einfachsten erkennen? Java Basics - Anfänger-Themen 32
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
M Muster erkennen. Idee: Fassade. Java Basics - Anfänger-Themen 3
J Sägezahn-Muster Java Basics - Anfänger-Themen 12
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
H Muster mit verschachtelten Schleifen kreieren. Java Basics - Anfänger-Themen 2
C Erste Schritte Muster ausgeben in der Konsole - großes V Java Basics - Anfänger-Themen 5
F Quadrat Mit Muster Java Basics - Anfänger-Themen 15
J Muster und Schleifen Java Basics - Anfänger-Themen 33
R 2D Arrays mit vorgegebenem Muster Java Basics - Anfänger-Themen 2
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
P Sägezahn Muster Programm Java Basics - Anfänger-Themen 2
C Array Muster erzeugen Java Basics - Anfänger-Themen 2
J Erste Schritte zweidimensionales Array Muster befüllen. Java Basics - Anfänger-Themen 4
J Strukturierung mit MVC Muster Java Basics - Anfänger-Themen 20
J Array Muster mit true und false Java Basics - Anfänger-Themen 6
C Muster programmieren Java Basics - Anfänger-Themen 4
C Muster programmieren Java Basics - Anfänger-Themen 4
E Muster auf der Konsole ausgeben lassen (Schleifen) Java Basics - Anfänger-Themen 7
arti28 Erste Schritte For-Schleifen und While-Schleifen, String als Muster ausgeben. Java Basics - Anfänger-Themen 3
L Java Muster Java Basics - Anfänger-Themen 1
Todesbote String auf Muster überprüfen Java Basics - Anfänger-Themen 19
C Array Zickzack Muster Java Basics - Anfänger-Themen 3
P RegEx Muster mehrfach treffen Java Basics - Anfänger-Themen 2
Dit_ Regex | Muster {a}{b}{c} Java Basics - Anfänger-Themen 7
pindakaas Compiler geht nicht (Dekorator Muster) Java Basics - Anfänger-Themen 18
M Datentypen Strings nach Muster auslesen und verarbeiten Java Basics - Anfänger-Themen 5
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
R Muster ausgeben Java Basics - Anfänger-Themen 4
H Muster ausgeben Java Basics - Anfänger-Themen 25
G String auf Muster prüfen Java Basics - Anfänger-Themen 5
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S OOP Warum gleiche Instanz der Klasse? (Factory-Muster) Java Basics - Anfänger-Themen 13
L Sägezahn Muster Java Basics - Anfänger-Themen 4
C Muster mit Zweidimensionalen Arrays Java Basics - Anfänger-Themen 18
0 Applet mit folgendem Muster erstellen Java Basics - Anfänger-Themen 12
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
Z Muster Java Basics - Anfänger-Themen 9
J nach Muster in String suchen Java Basics - Anfänger-Themen 4
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
B Zusammenhängende Blöcke bei x-gewinnt erkennen? Java Basics - Anfänger-Themen 14
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N palindrom erkennen Java Basics - Anfänger-Themen 3
A Figur erkennen, aber Abweichung falsch Java Basics - Anfänger-Themen 2
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
P Eigenschaft eines imperativen Algo (Pseudocode) sofort erkennen Java Basics - Anfänger-Themen 1
G Verlassen einer ComboBox erkennen Java Basics - Anfänger-Themen 16
S Java Großbuchstabe erkennen Java Basics - Anfänger-Themen 5
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
B Unterschiede in einer Liste erkennen Java Basics - Anfänger-Themen 1
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
J Leerzeichen im Pfad automatisch erkennen Java Basics - Anfänger-Themen 30
M Input/Output Zeilenumbrüche erkennen und beibehalten Java Basics - Anfänger-Themen 4
X XML-Eintrag an Attribute erkennen Java Basics - Anfänger-Themen 2
N Erkennen ob Linkshänder Maus Java Basics - Anfänger-Themen 4
L In Javakara Palindrom erkennen. Java Basics - Anfänger-Themen 9
B Tastatureingabe erkennen Java Basics - Anfänger-Themen 8
D Input/Output Buchstaben als bestimmte Zahl erkennen Java Basics - Anfänger-Themen 4
F Blinken oder Dauer ein erkennen Java Basics - Anfänger-Themen 6
F Linien und Kurven erkennen Java Basics - Anfänger-Themen 2
T Richtigen Wert erkennen Java Basics - Anfänger-Themen 9
D Klassenmethode: Befehl erkennen, dann int zurückgeben Java Basics - Anfänger-Themen 2
S Laufzeitfehler erkennen Java Basics - Anfänger-Themen 3
T Erste Schritte Methoden anwenden und erkennen Java Basics - Anfänger-Themen 5
D Erste Schritte Array erkennen Java Basics - Anfänger-Themen 4
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
J Byte Folge erkennen Java Basics - Anfänger-Themen 5
F Attribute von Feldinhalten erkennen Java Basics - Anfänger-Themen 6
N Erste Schritte Doppelwerte erkennen Java Basics - Anfänger-Themen 5
H Schachbrett erkennen Java Basics - Anfänger-Themen 19
T Erste Schritte Leerzeile in JAVA erkennen /übergehen Java Basics - Anfänger-Themen 9
S Erkennen ob Zahl durch 500Teilbar ist Java Basics - Anfänger-Themen 21
Java-Insel StringBuilder Zeilenumbrüche erkennen Java Basics - Anfänger-Themen 3
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
X String Sonderzeichen/Zahlen erkennen Java Basics - Anfänger-Themen 3
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
M Betriebssystem erkennen? Java Basics - Anfänger-Themen 12
lumo Collections Array - erkennen von positionsänderungen Java Basics - Anfänger-Themen 5
M Java-Prog soll Texte innerhalb Bildern erkennen Java Basics - Anfänger-Themen 2
S Leere Datei erkennen Java Basics - Anfänger-Themen 5
E ActionListener in anderer Klasse erkennen Java Basics - Anfänger-Themen 13
Kukulkan Java-Version (ME, SE) erkennen und darauf reagieren? Java Basics - Anfänger-Themen 35
E Position erkennen und überlappungen feststellen Java Basics - Anfänger-Themen 4
3 Leerzeichen erkennen Java Basics - Anfänger-Themen 3
A Gruppen von Namen erkennen Java Basics - Anfänger-Themen 21
M In Router einloggen und PCs im Netzwerk erkennen Java Basics - Anfänger-Themen 18
M ziffer in zahl erkennen mit boolean Java Basics - Anfänger-Themen 12
D Zahl erkennen Java Basics - Anfänger-Themen 4
T Image Position erkennen Java Basics - Anfänger-Themen 6
S Sonderzeichen in einem String erkennen Java Basics - Anfänger-Themen 20
S Filelock erkennen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben