игнорировать перевод строки для поиска иголки в стоге сена и сохранять позиции текста - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь «обернуть» поиск, игнорируя \ n при использовании ether indexOf или regex Pattern.Я не могу просто удалить все символы новой строки, так как тогда найденные индексы будут неправильными.

Например:

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);

Должен вывести:

Start: 5 End: 9 

Если яудалите символы новой строки,

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

Тогда индексы будут испорчены:

Start: 4 End: 7

Примечание: я также собираюсь использовать более сложное регулярное выражение, чем в примере.

Я реализую функцию поиска в текстовом редакторе и пытаюсь создать опцию «обтекание».Есть идеи?

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Вам нужно взять поисковое ключевое слово и подготовить его, вставляя необязательный разрыв строки после каждого символа перед поиском в стеке хей. Рассмотрим этот код:

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");

ВЫВОД:

Start: 4 End: 8

Кстати, ваши ожидаемые результаты 5 и 9 кажутся мне неправильными.

0 голосов
/ 27 марта 2012
myString.replaceAll("\n","");

попробуйте это

...