Nach regulären Ausdrücken suchen

BioInfoNerd

Mitglied
Hi! Ich habe die Aufgabe, in mehreren Files nach bestimmten Mustern zu suchen...z.Bsp. G[A-Z]{2}G.
Die einfache Suche ( bloßes Auftreten) nach meinen 50 Mustern habe ich schon einmal programmiert, doch dieses Mal soll geprüft werden, ob ein Muster vorkommt, wenn bereits ein anderes gefunden wurde...Das Ziel wäre später eine 50x50 Matrix anhand derer man ablesen kann, ob Muster 1 und Muster 2 zusammen in den Files vorkommen und wie oft.
Und im Moment fällt mir nur eine elendlange Liste von while/if (m1.find() && mX.find())- Befehlen ein, was aber eine ganze Menge wären...
Daher meine Frage, ob Ihr wisst, wie man so etwas ohne großen Aufwand programmieren könnte...Pseudocode wäre schon ausreichend, Vorschläge für Perl wären auch in Ordnung.
 

AquaBall

Top Contributor
Und im Moment fällt mir nur eine elendlange Liste von while/if (m1.find() && mX.find())- Befehlen ein
...
Pseudocode wäre schon ausreichend

Mach ein Array, dann brauchst du keine langen ifs, sondern eine doppelte Schleife, und kannst jederzeit erweitern.
Java:
suchstrings[] = { "abc", "xyz", "dies|das" }
for (vorgabe: Suchstrings) {
  for (suche: Suchstrings) {
    if existiertInFile(vorgabe){
      position = existiertInFile(suche)
      position registrieren in deiner Matrix
    }
  }
}
 

BioInfoNerd

Mitglied
Hmm, die Position suche ich nicht primär oder missverstehe ich dich?....Es soll einfach gesucht werden, welche Motivpaare in einem File vorkommen...Kommt eine Paarung vor, soll der jeweilige Zähler +1 gesetzt werden. Habe schon an doppelte Schleifen gedacht, jedoch weiß ich nicht genau, wie ich diese aufbauen soll, dass für jedes Muster überprüft wird, ob es vorkommt und wenn ja, welches andere Muster ebenfalls vorkommt.Die Idee mit dem Array ist gut, obwohl ich damit noch nicht viel Erfahrung habe.

Was genau meinst Du mit vorgabe und suche?
 

AquaBall

Top Contributor
Hmm, die Position suche ich nicht primär oder missverstehe ich dich?

Dann brauchst du nicht die Position beachten, sondern nur die Existenz.
oder die Anzahl um 1 erhöhen.

weiß ich nicht genau, wie ich diese aufbauen soll, dass für jedes Muster überprüft wird, ob es vorkommt und wenn ja, welches andere Muster ebenfalls vorkommt.
...
Was genau meinst Du mit vorgabe und suche?
Frage und Antwort hast du dir selbst gegeben.
Vorgabe ist der Erste String dn du suchst.
Suche ist der zweite.

Java:
suchstrings[] = { "abc", "xyz", "dies|das" }
for (string1: Suchstrings) {
  for (string2: Suchstrings) {
    if existiertInFile(string1) && existiertInFile(string1) && (string1!=string2){
      paarung = true
      paarung registrieren in deiner Matrix
    }
  }
}

Nachdem du nur Pseudocode wolltest, müsste das als Anleitung reichen.
 

BioInfoNerd

Mitglied
Problem ist fast gelöst^^. Sry, bin manchmal bischen schwer von Begriff. Das Suchen nach den Paaren funktioniert, jedoch habe ich noch Probleme mit der Matrix.

Java:
String[] stringArray = {Eins, "Zwei", "Drei"};	
				int anzahl[][]=new int[50][50];
		
				for (int i = 0; i < stringArray.length; i++)
				 {	
					String element = stringArray[i];
					for (int j = 0; j < stringArray.length; j++)
					{
						String element2 = stringArray[j];				 				
							if (zeile.contains(element))
							{
								if (zeile.contains(element2)&& zeile.contains(element)&& element !=element2)
								{
									System.out.println(element+element2);																					 
									anzahl[i][j]++;
								}	
							}

Ich habe also ein Array mit den Suchstrings und ein Array, in dem ich gern die Anzahl der gefundenen Paarungen speichern möchte ( können ja mehrmals auftreten). Wie jedoch sage ich das dem Array genau? Der Befehl anzahl[j]++; scheint nicht ganz zu funktionieren.
Letztendlich möchte ich die Matrix dann auch als .csv ausgeben, um damit zu arbeiten.
 
Zuletzt bearbeitet:

BioInfoNerd

Mitglied
Ich auch nicht wirklich...ist mehr so pseudocodemäßig^^.
Ich möchte, dass der entsprechende Wert im anzahl-Array +1 gesetzt wird, wenn eine Paarung gefunden wurde. Also wenn Paarung i,j gefunden, dann entsprechendes Feld im anzahl-Array +1.
 

AquaBall

Top Contributor
Der Befehl anzahl[j]++; scheint nicht ganz zu funktionieren.


Weil
Code:
anzahl[i][j]
ja noch keinen Wert hat (=null). (Sagt dir auch die IDE, falls du mit Eclipse arbeitest.)
Musst du vorher mit '0' belegen.

Außerdem kannst du die Schleifen viel eleganter machen:
Java:
for (String element:stringArray) {  /// ... wird für jedes Element aus stringArray durchlaufen.
... ist eine gültige und funktionierende Schliefe in Java!
 

BioInfoNerd

Mitglied
Die Schleifen sind so natürlich eleganter...Doch wie weise ich den Paarungen nun bestimmte Zellen in dem Array anzahl zu? Bräuchte man ja trotzdem noch andere Indizes....
Java:
String[] stringArray = {Eins, "Zwei", "Drei"};	
				int anzahl[][]=new int[50][50];
				 for(int i=0; i<anzahl.length;i++){
			            for(int j=0; j<anzahl.length; j++){
			                anzahl[i][j]=0;
			                        
			            }
			        }
			 
				for (String element:stringArray)
				 {	
					for (String element2:stringArray)
					{				 																
						if (zeile.contains(element))
							{
								if (zeile.contains(element2)&& zeile.contains(element)&& element !=element2)
								{
									System.out.println(element+element2);		
                                                 //hier müsste ja die Zuweisung erfolgen, welche Zelle im Array hochgezählt werden soll
 
Zuletzt bearbeitet:

BioInfoNerd

Mitglied
Hab mich jetzt mal wieder kurz damit beschäftigt...Das Array anzahl wird automatisch mit Nullen gefüllt..ich arbeite übrigens mit Eclipse. Dieser Teil ist also unnötig:
Java:
for(int i=0; i<anzahl.length;i++){
                        for(int j=0; j<anzahl.length; j++){
                            anzahl[i][j]=0;
                                    
                        }
                    }

Das Problem mit der Zuweisung besteht immer noch und ich habe noch ein weiteres Problemchen.
Es ist notwendig, dass ich neben den gefundenen Paarungen auch noch die Zeile ausgebe, in der sie gefunden wurden...bloß für die beiden Muster getrennt.
Java:
int z=0;
			int y=0;
			while ((zeile = reader.readLine()) != null )
			{
				z++;
				while ((zeile1 = reader1.readLine()) != null )
				{
				y++;				
				String[] stringArray = {Eins, "Zwei", "Drei"};	
								
				int anzahl[][]=new int[50][50];	  
				
				for (String element:stringArray)
				 {	  
					for (String element2:stringArray)
					{	  
				       		if (zeile.contains(element))
							{	
							       if (zeile1.contains(element2)&& element !=element2)
								{
									System.out.println(element+element2+z+" "+y);
Das Problem ist, dass nur geschaut wird, welche Muster kommen in der ersten Zeile vor und welche Partner haben sie, was jedoch über alle Zeilen funktioniert.
So ein Ergebnis ist z. Bsp.:
GHLFGDrei1 1
DreiGHLFG1 1
GHLFGZwei1 2
GHLFGDrei1 2
DreiZwei1 2
Der erste Ausdruck kommt immer aus der ersten Zeile, der dazugehörige kann in allen Zeilen auftreten.
 
Zuletzt bearbeitet:

AquaBall

Top Contributor
Dieser Teil ist also unnötig:
Java:
for(int i=0; i<anzahl.length;i++)
   for(int j=0; j<anzahl.length; j++)
      anzahl[i][j]=0;
Das Problem mit der Zuweisung besteht immer noch.
Ich halte das nicht für unnötig.
Java:
int i;
i++;
wird nicht funktionieren, weil i nicht initialisiert ist!

Wenn du also die Werte von anzahl[][] vorbelegst, und dann mit
Code:
anzahl[x][y]++;
berechnest (was du inzwischen wieder rausgeschmissen hast), hast du im Array nach der Auswertung überall die Anzahl drin.

und ich habe noch ein weiteres Problemchen.
Es ist notwendig, dass ich neben den gefundenen Paarungen auch noch die Zeile ausgebe, in der sie gefunden wurden...bloß für die beiden Muster getrennt.
So ganz versteh ich die Frage jetzt nicht mehr.
Wenn du jetzt aber Zeilen ins Spiel bringst, und doch eine Position haben willst, und die Ausgabe nicht auf Basis des Arrays, sondern an der FileListe, dann wirds halt ein Stück komplexer, (aber nicht komlizierter). Ursprünglich wolltest du nur wissen,
Code:
ob Muster 1 und Muster 2 zusammen in den Files vorkommen
.
Ich glaube aber, dass du jetzt genügend Hilfe hast, um dich schrittweise der Lösung zu nähern.
Viel Glück.
 

BioInfoNerd

Mitglied
Also ich versuchs nochmal genau zu erklären.
Ich möchte zum einen die Matrix erstellen in der die Anzahl des Auftretens der Paarungen gezählt wird.

Zum anderen möchte ich die Ausprägungen der Muster in einem Textfile speichern mit der Zusatzinformation, in welcher Zeile sie jeweils gefunden wurden.

Und hier habe ich das Problem, dass nach der Suche in der ersten Zeile abgebrochen wird.

Java:
int z=0;
			int y=0;
			while ((zeile = reader.readLine()) != null )
			{	
				z++;
				while ((zeile1 = reader1.readLine()) != null )
				{	
					y++;
					Matcher m1 = Muster1.matcher(zeile);
					while (m1.find()) 
					{ 	
						String Eins= m1.group(0);
						String[] stringArray = {Eins, "Zwei", "Drei"};	
								
						int anzahl[][]=new int[50][50];	  
						for(int i=0; i<anzahl.length;i++)
						for(int j=0; j<anzahl.length; j++)
							anzahl[i][j]=0;
						for (int i = 0; i < stringArray.length; i++)
						{  
							String element = stringArray[i];
							for (int j = 0; j < stringArray.length; j++)
							{
								String element2 = stringArray[j];	  				       			 																
								if (zeile.contains(element))
								{								
									if (zeile1.contains(element2)&& element !=element2)
									{	
									
										System.out.println(element+element2+" "+z+" "+y+"\r\n"); 
										//wird dann in .txt geschrieben...
										anzahl[i][j]++;
									}	
								}	
								System.out.print(anzahl[i][j] + "\r\n"); //soll der Überprüfung dienen
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
C Meldung einer Klasse nach "oben" Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben