[java] 자바 : 문자열에서 일치하는 위치를 얻는 방법?

String match = "hello";
String text = "0123456789hello0123456789";

int position = getPosition(match, text); // should be 10, is there such a method?



답변

이를 수행하는 방법은 다음과 같습니다.

지정된 문자열에서 지정된 문자열 ( 처음 색인에서 시작하여 앞뒤로 검색) 의 첫 번째 ( 또는 마지막 ) 어커런스 의이 문자열 내에서 인덱스를 리턴합니다 .


String text = "0123hello9012hello8901hello7890";
String word = "hello";

System.out.println(text.indexOf(word)); // prints "4"
System.out.println(text.lastIndexOf(word)); // prints "22"

// find all occurrences forward
for (int i = -1; (i = text.indexOf(word, i + 1)) != -1; i++) {
    System.out.println(i);
} // prints "4", "13", "22"

// find all occurrences backward
for (int i = text.length(); (i = text.lastIndexOf(word, i - 1)) != -1; i++) {
    System.out.println(i);
} // prints "22", "13", "4"


답변

이것은 정규식을 사용하여 작동합니다.

String text = "I love you so much";
String wordToFind = "love";
Pattern word = Pattern.compile(wordToFind);
Matcher match = word.matcher(text);

while (match.find()) {
     System.out.println("Found love at index "+ match.start() +" - "+ (match.end()-1));
}

출력 :

인덱스 2-5에서 ‘사랑’을 찾았습니다

일반 규칙 :

  • 정규식 검색은 왼쪽에서 오른쪽으로 이루어지며 일치하는 문자를 사용한 후에는 재사용 할 수 없습니다.

답변

text.indexOf(match);

문자열 javadoc 참조


답변

단일 인덱스 찾기

다른 사람들이 말했듯 text.indexOf(match)이 단일 일치 항목을 찾는 데 사용하십시오 .

String text = "0123456789hello0123456789";
String match = "hello";
int position = text.indexOf(match); // position = 10

여러 인덱스 찾기

코드 유지 관리 성에 대한 @StephenC 의 의견@polygenelubricants의 답변 을 이해하는 데 어려움이 있기 때문에 텍스트 문자열에서 일치하는 모든 인덱스를 얻는 다른 방법을 찾고 싶었습니다. 다음 코드 ( 이 답변 에서 수정 됨 )가 그렇게합니다.

String text = "0123hello9012hello8901hello7890";
String match = "hello";

int index = text.indexOf(match);
int matchLength = match.length();
while (index >= 0) {  // indexOf returns -1 if no match found
    System.out.println(index);
    index = text.indexOf(match, index + matchLength);
}


답변

string.indexOf를 사용하여 시작 색인을 가져 오십시오.


답변

while-loop, cool 내부를 지정하여 파일에서 모든 일치 항목을 가져올 수 있습니다.

$ javac MatchTest.java
$ java MatchTest
1
16
31
46
$ cat MatchTest.java
import java.util.*;
import java.io.*;

public class MatchTest {
    public static void main(String[] args){
        String match = "hello";
        String text = "hello0123456789hello0123456789hello1234567890hello3423243423232";
        int i =0;
        while((i=(text.indexOf(match,i)+1))>0)
            System.out.println(i);
    }
}


답변

int match_position=text.indexOf(match);