2012-03-27 2 views
1

ether indexOf 또는 regex Pattern을 사용할 때 기본적으로 \ n을 무시하고 검색을 시도하고 있습니다. 찾은 색인이 잘못되어 모든 개행 문자를 제거 할 수는 없습니다.건초 더미에서 바늘을 찾고 텍스트 위치를 보존하기위한 줄 바꿈을 무시합니다.

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 

참고 : 예제에서 사용한 것보다 더 복잡한 정규식을 사용하려고합니다.

텍스트 편집기에서 찾기 기능을 구현 중이며 '둘러보기'옵션을 만들려고합니다. 아이디어가 있으십니까?

+1

무시 하시겠습니까? 색인이 잘못 되었기 때문에 색인을 제거 할 수 없다고 말하지만 indexOf를 수행하면 개행 문자가 계산되어 무시할 수 있습니다. 원하는 입출력을 보여주십시오. – Danny

+1

또한 (코드를 통해) 사용자가 솔루션을 안내 할 수 있도록 시도하려는 것을 보여주십시오. –

답변

2

보십시오. 이 코드를 고려하십시오

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 : 나에게 올바른을하지 않는 것 (5)과 9

Start: 4 End: 8 

BTW 예상되는 출력.

+0

간단한 문자열에 좋을 것 같지만 복잡한 정규식 검색은 어떻게해야할까요? 죄송합니다. 오타가 있습니다. – RedHatter

+0

'복잡한 정규식 검색'의 몇 가지 예를 제공해주십시오. 내가 알기로는 중간에 줄 바꿈 문자를 무시하여 건초 더미에서 바늘을 찾으려고합니다. 적어도 질문 제목이 말한 것입니다. – anubhava

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

당신은 검색 키워드를 가지고 당신이 헤이 스택에서 검색하기 전에 모든 문자 후 옵션 줄 바꿈을 중간에 끼워 넣는하여 준비해야이 하나

+0

그건 ** 줄 바꿈 **을 대체하여 문자열에서 완전히 제거합니다. 그렇게 색인을 망칠까요? – RedHatter

관련 문제