Suchen eines Musters in einer Gruppe von Werten in Java

9

Gibt es eine Möglichkeit, ein gemeinsames Muster in einer Liste von Strings in Java zu extrahieren?

Zum Beispiel, wenn wir eine Liste von Werten haben:

%Vor%

Gibt es eine Möglichkeit, daraus abzuleiten, dass wir 3digits haben, gefolgt von '-', dann einem Buchstaben L und schließlich einem numerischen Zeichen?

Ich denke, es hat etwas mit gewöhnlichen Substrings oder etwas ähnlichem zu tun, aber ich konnte noch nichts finden.

Danke!

EDIT: Offensichtlich wird es keine perfekte Erkennung sein, es wird nur eine Empfehlung basierend auf den Daten zurückgeben.

Was ich versuche zu bauen, ist etwas, das das ist. Wenn der Benutzer in dem Video auf die Spalte klickt, wird empfohlen, die Daten auf ":" aufzuteilen.

    
Raphael Khoury 23.11.2016, 08:29
quelle

1 Antwort

4

Ich denke, dass Sie vielleicht das Muster, das eine Gruppe von Zeichenfolgen gemeinsam haben könnte, "ableiten" und nicht anhand von Regex validieren möchten. Dieses Problem kann zur Mustererkennung gehören.

  • Sie können zuerst den Algorithmus Longest Common Teilstring (nicht Longest Common Subsequence) auf zwei beliebige Strings anwenden. Beachten Sie, dass Sie gemäß Ihrer String-Liste die zwei längsten gemeinsamen Teilstrings 00 und -L erhalten, also müssen Sie sich darum kümmern.
  • Wenn Sie dann eine gemeinsame Teilzeichenfolge als Ergebnis erhalten, verwenden Sie einfach contains() Methode, um nach dem Muster in den anderen Zeichenfolgen zu suchen.

Diese Methode funktioniert nur gut, wenn das gemeinsame Muster zwischen den Strings mindestens ein paar Zeichen lang ist.

BEARBEITEN:

Wenn Sie etwas wie im gegebenen Video implementieren möchten, müssen Sie die Zeichenfolgen nur auf Basis eines bestimmten Trennzeichens teilen. Ein einfacher und naive Ansatz:

  • Erstellen Sie eine Liste mit möglichen Trennzeichen wie : , . , - , , , :: usw.
  • Suchen Sie all nach Ihren Strings für das Auftreten eines bestimmten Trennzeichens. Der LCS-Algorithmus würde nicht funktionieren, da die Strings gemeinsame Datenwerte haben könnten (wie "Ja" und "Nein" wie im Video), die nicht als Trennzeichen gedacht sind.
  • split die Zeichenfolgen basierend auf dem Trennzeichen, wenn es in allen (oder sogar den meisten) Strings gefunden wird!

Es gibt möglicherweise bessere Lösungen als diese!

    
skrtbhtngr 23.11.2016, 08:49
quelle