2012-03-27 6 views
1

Ich versuche, eine Suche 'herumzuwickeln', grundsätzlich zu ignorieren \ n bei der Verwendung von Ether IndexOf oder Regex Pattern. Ich kann nicht einfach alle Zeilenumbruchzeichen entfernen, da dann die gefundenen Indizes falsch wären.ignorieren newline für die Suche nach einer Nadel im Heuhaufen und bewahren Sie die Textpositionen

Zum Beispiel:

Matcher matcher = Pattern.compile("dog").matcher("cat\n do\ng cow"); 
matcher.find(); 
int start = matcher.start(); 
int end = matcher.end(); 
System.out.println("Start: "+start+" End: "+end); 

Should Ausgang:

Start: 5 End: 9 

Wenn ich die Zeilenumbrüche zu entfernen,

Matcher matcher = Pattern.compile("dog").matcher("cat\n do\ng cow".replaceAll("\n","")); 

Dann würden die Indizes verkorkste werden:

Start: 4 End: 7 

Hinweis: Ich werde auch komplexere Regex verwenden, als ich im Beispiel verwendet habe.

Ich implementiere die Suche-Funktion in einem Texteditor und versuche, eine "Wrap around" -Option zu erstellen. Irgendwelche Ideen?

+1

Was meinst du mit ignorieren sie? Sie sagen, dass Sie sie nicht entfernen können, weil die Indizes falsch sind, aber wenn Sie indexOf tun, zählt es die Newline-Zeichen und Sie würden sie nicht ignorieren. Bitte gewünschte Eingabe und Ausgabe anzeigen. – Danny

+1

Bitte zeigen Sie auch, was Sie versuchen (über Code), damit die Leute versuchen können, Sie in eine Lösung zu führen. –

Antwort

2

Sie müssen Suchbegriff nehmen und bereiten sie durch nach jedem Zeichen optional Zeilenumbruch interjecting, bevor Sie in den hey-Stack suchen. Betrachten Sie diesen Code:

String needle = "dog"; 
String regex = needle.replaceAll("(.(?!$))", "$1\n?"); // inserts line breaks 
// regex now becomes "d\n?o\n?g" 
Pattern p = Pattern.compile(regex); 
Matcher matcher = p.matcher("cat do\ng cow"); 
if (matcher.find()) { 
    int start = matcher.start(); 
    int end = matcher.end(); 
    System.out.println("Start: "+start+" End: "+end); 
} 
else 
    System.err.println("No match available"); 

OUTPUT:

Start: 4 End: 8 

BTW Ihre erwartete Ausgang 5 und 9 nicht richtig zu mir zu sein scheinen.

+0

Sieht gut aus für einfache Strings, aber was ist mit komplexeren Regex-Suchen? Entschuldigung, es gab einen Tippfehler im Code – RedHatter

+0

Bitte geben Sie einige Beispiele für komplexere Regex-Suchen an. Wie ich verstehe, versuchen Sie, eine Nadel im Heuhaufen zu finden, indem Sie dazwischen Newline-Zeichen ignorieren (zumindest hat das der Titel der Frage gesagt). – anubhava

0
myString.replaceAll("\n",""); 

versuchen dieses

+0

Das würde die Zeilenumbrüche ** ersetzen und sie komplett aus der Zeichenfolge entfernen. Tun Sie so die Indizes durcheinander. – RedHatter