Such-algorithmus

Status
Nicht offen für weitere Antworten.
J

Jonnny

Gast
Hallo Zusammen,

ich habe erst vor einer Woche mit Java angefangen und stehe schon vor einem großen Problem.

Ich habe eine Datei, dessen Inhalt ich schon ein String zusammengefasst hab. Nun soll dieser String (Datei) nach einem anderen String (Suchstring) durchsucht werden.

Ich habe schon versucht etwas zu entwickeln, aber komme leider nicht weiter...bin für jede Hilfe dankbar.

Code:
  static String_suchen (String Datei, String ID)
  {
  	String sDateiStr=new String(Datei);
  	String sIDStr	=new String(ID);
  	
  	int i;
  	for (i=1; i <= sDateiStr.length(); i++)
  	{
  		if ...?
  	}
  	
  	
  	
  }


-------

Das eigentliche Ziel ist es: Dass der User mittels einer eingegebenen ID aus einer Ursprungsdatei Daten in eine neu abgelegte Datei filtern soll.

d. h. User gibt "abc" ...daraufhin wird die Ursprungsdatei nach Kopfmuster mit "abc" durchsucht. Dessen Inhalt wird dann in ein z. B. .doc-Datei abgespeichert.
 

Sky

Top Contributor
Also, dein Problem mit den Dateien hin und her und neu anlegen habe ich nicht verstanden; dein String-Problem ist jedoch relativ einfach zu lösen:

Code:
  // Methoden schreibt man klein und ohne '_'
  // Variablen schreibt man ebenfalls klein
  // Rückgabetyp definieren; hier: boolean = true, wenn ID in Datei vorhanden ist
  static boolean sucheString(String datei, String id) {
    // liefert die Position von id im String Datei zurück
    // oder -1, wenn der String nicht gefunden wird.
    int pos = datei.indexOf(id); 
    return ( pos != -1 );
  }
 
J

Jonnny

Gast
hi Sky80,

ich hab nur ne Frage,

ich will ja die genaue Position des Suchstrings wiedergeben, aber mit boolean gebe ich doch einen wahrheitswert wieder oder nicht!?
 

mic_checker

Top Contributor
Du kriegst zurück ob der String enthalten ist, ansonsten geb int zurück und überprüf ob -1 ist, dann ist der nicht enthalten.
andernfalls kannst du dir die position zurückgeben lassen.

also rückgabewert auf int und datei.indexOf(id) zurückgeben lassen.
 
J

Jonnny

Gast
Danke mic_checker,

so hat es geklappt.

Nun habe ich die erste Position. Ich brauche aber noch die Endposition.

Wie kann ich also nach einem best. String suchen , dass nach einer best. Position folgt ?

Das Problem ist, dass das gesuchte String sehr oft vorkommt. Mir ist aber das erste nach der Anfangsposition wichtig...die anderen sind irrelevant.
 

mic_checker

Top Contributor
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#indexOf(int,%20int)

Dort kannst du dann spezifizieren ab welcher Position du suchen willst, guck nach der ersten Position, speicher die Position ab, dann such ab dieser Position mit der Methode den Rest wieder durch und geb es als Ergebnis zurück.


Ansonsten, wenn du das letzte Vorkommen eines best. Strings haben willst, mach lastIndexOf:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
 
J

Jonnny

Gast
Also die erste Position habe ich ermittelt und unter "apos" gespeichert.

Nun habe ich aber Probleme mit dem zweiten Teil.

Code:
public int indexOf(int ch,  int fromIndex) {

(this.charAt(k) == ch) && (k >= fromIndex)

}

Wie muss dann mein Code aussehen!? Ich weiss nicht was ich statt "ch" eingeben muss. Ich will nach einem String suchen ... aber ich muss ein integer angeben? oder?
und was muss ich statt dem "k" angeben?!

Ohh...da muss ich noch viel lernen...
:###
 

Wildcard

Top Contributor
meez hat gesagt.:
Aber so wenig wie möglich verwenden, da sehr langsam...
Angeblich im vergleich zu anderen Sprachen sogar sehr schnell.
Die Frage ist aber eben was das eigentlich heißt. Hat jemand mal ein paar messungen
bezüglich indexOf, StringTokenizer, RegEx gemacht, oder einen Link der auf den Performance-Unterschied näher eingeht?
 

mic_checker

Top Contributor
Jonnny hat gesagt.:
Code:
public int indexOf(int ch,  int fromIndex) {

(this.charAt(k) == ch) && (k >= fromIndex)

}

Wie muss dann mein Code aussehen!? Ich weiss nicht was ich statt "ch" eingeben muss. Ich will nach einem String suchen ... aber ich muss ein integer angeben? oder?
und was muss ich statt dem "k" angeben?!

:###

Also das ist die "falsche" der indexOf Methoden...du brauchst:

http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html#indexOf(java.lang.String,%20int)
-> indexOf(String str, int fromIndex)

Ein Beispiel-Code

Code:
   String s = "abcdhalloefghallo";
   String search_str = "hallo";

//.....
	int pos1 = s.indexOf(search_str);
	
	if(pos1 != -1) {
		int pos2 = s.indexOf(search_str,pos1+1);
		System.out.println("Erstes Mal gefunden an Stelle "+pos1);
		if(pos2 != -1)
			System.out.println("Zweites Mal gefunden an Stelle "+pos2);
		else
			System.out.println("Kein zweites Mal gefunden");
	} else 
		System.out.println("Nicht gefunden");

Beim zweiten Aufruf von indexOf gibst du an das erst ab Position pos1 + 1 gesucht werden soll (wenn ab pos gesucht wird liefert er das selbe Ergebnis nochmal).

Hoffe konnte etwas helfen.
 

meez

Top Contributor
Wildcard hat gesagt.:
bezüglich indexOf, StringTokenizer, RegEx gemacht, oder einen Link der auf den Performance-Unterschied näher eingeht?

Ich hab die Methode replaceAll der Stringklasse mit einer selbst geschriebenen, welche auf indexOf() basiert, verglichen.
Da war die String-Klassenmethode teilweise bis zu 10 mal langsamer...

Zudem kann es logisch gar nicht schneller sein, da schlussendlich auch der Regex-Parser auf die Grundebefehle zurückgreifen muss, so wie auch indexOf() dies tut.
 

Sky

Top Contributor
meez hat gesagt.:
Ich hab die Methode replaceAll der Stringklasse mit einer selbst geschriebenen, welche auf indexOf() basiert, verglichen.
Da war die String-Klassenmethode teilweise bis zu 10 mal langsamer...

Basierte deine eigene Implementierung auch auf der String-Klasse oder hast Du mit einem Stringbuffer gearbeitet??
 

mic_checker

Top Contributor
Wildcard hat gesagt.:
meez hat gesagt.:
Aber so wenig wie möglich verwenden, da sehr langsam...
Angeblich im vergleich zu anderen Sprachen sogar sehr schnell.
Die Frage ist aber eben was das eigentlich heißt. Hat jemand mal ein paar messungen
bezüglich indexOf, StringTokenizer, RegEx gemacht, oder einen Link der auf den Performance-Unterschied näher eingeht?

Hab auch mal gesucht, beim javaperformanceportal wurde ich jetzt nicht fündig. Hier ist ganz wenig zu StringTokenizer (sind aber eher allgemeine Performance-Tipps):
http://www.javacommerce.com/displaypage.jsp?name=java_performance.sql&id=18264

Leider keine genauen Angaben drüber.

http://www.ftponline.com/javapro/2002_08/online/servletsjsp_08_06_02/Java Servlets Ch16.pdf
Hier wird auch wieder nur gesagt man sollte den Einsatz von StringTokenizer eher vermeiden.

Im Forum von SUN habe ich in einigen Threads auch nur grobe Angaben gefunden, z.B. das der Einsatz von StringTokenizer 4-5 mal schneller sein soll als der von split(...). Aber da weiss man ja auch nicht wie die Leute das "gemessen" haben.

Vielleicht ist ja auch der folgende Thread interessant:
http://forum.java.sun.com/thread.jspa?forumID=31&threadID=569915

Wäre allerdings auch froh wenn jemand was handfestes posten könnte ..
 

meez

Top Contributor
sky80 hat gesagt.:
meez hat gesagt.:
Ich hab die Methode replaceAll der Stringklasse mit einer selbst geschriebenen, welche auf indexOf() basiert, verglichen.
Da war die String-Klassenmethode teilweise bis zu 10 mal langsamer...

Basierte deine eigene Implementierung auch auf der String-Klasse oder hast Du mit einem Stringbuffer gearbeitet??

Teils teils...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Compiler-Fehler No such Field error Java Basics - Anfänger-Themen 20
M Such- und Ausgabefunktion Java Basics - Anfänger-Themen 39
C Methoden numberField.getDouble no such method error Java Basics - Anfänger-Themen 4
L no such method error: main() Java Basics - Anfänger-Themen 2
S geeignetes Such Pattern Java Basics - Anfänger-Themen 6
D binaeres such problem. Java Basics - Anfänger-Themen 7
K Algorithmus entwickeln Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben