programing

Java에서 문자열의 하위 문자열 두 번째 항목 찾기

minecode 2023. 1. 4. 20:14
반응형

Java에서 문자열의 하위 문자열 두 번째 항목 찾기

우리는 끈을 가지고 있다, 예를 들어"itiswhatitis"서브스트링이라고 하면"is"의 인덱스를 찾아야 합니다.'i'현악기가 있을 때"is"는 원래 문자열에서 두 번째로 발생합니다.

String.indexOf("is")이 경우 2가 반환됩니다.이 경우 출력을 10으로 해 주세요.

의 오버로드된 버전을 사용합니다.이 버전에서는 시작 인덱스(fromIndex)를 두 번째 파라미터로 사용합니다.

str.indexOf("is", str.indexOf("is") + 1);

사용하고 있는 것:Apache Commons Lang: StringUtils.ordinalIndexOf()

StringUtils.ordinalIndexOf("Java Language", "a", 2)
int first = string.indexOf("is");
int second = string.indexOf("is", first + 1);

이 오버로드에 의해 지정된 인덱스에서 서브스트링이 검색되기 시작합니다.

발생 위치의 배열을 반환하는 함수를 작성할 수 있습니다.Java에는 String.regionMatches 함수가 있어 매우 편리합니다.

public static ArrayList<Integer> occurrencesPos(String str, String substr) {
    final boolean ignoreCase = true;
    int substrLength = substr.length();
    int strLength = str.length();

    ArrayList<Integer> occurrenceArr = new ArrayList<Integer>();

    for(int i = 0; i < strLength - substrLength + 1; i++) {
        if(str.regionMatches(ignoreCase, i, substr, 0, substrLength))  {
            occurrenceArr.add(i);
        }
    }
    return occurrenceArr;
}

파티에 늦지 않았으면 좋겠는데..제 대답은 이렇습니다.저는 패턴/매처를 사용하는 것이 더 효율적일 것 같은 regex를 사용하기 때문에 좋아합니다.하지만 이 답변은 개선될 수 있을 것 같습니다.

    Matcher matcher = Pattern.compile("is").matcher("I think there is a smarter solution, isn't there?");
    int numOfOcurrences = 2;
    for(int i = 0; i < numOfOcurrences; i++) matcher.find();
    System.out.println("Index: " + matcher.start());

루프를 사용할 수 있을 것 같아요

1 - check if the last index of substring is not the end of the main string.
2 - take a new substring from the last index of the substring to the last index of the main string and check if it contains the search string
3 - repeat the steps in a loop

두 개 이상의 오카렌스에 대한 인덱스를 찾으려는 경우:

public static int ordinalIndexOf(String fullText,String subText,int pos){

    if(fullText.contains(subText)){
        if(pos <= 1){
            return fullText.indexOf(subText);
        }else{
            --pos;
            return fullText.indexOf(subText, ( ordinalIndexOf(fullText,subText,pos) + 1) );
        }
    }else{
        return -1;
    }

}

좋은 파티인 것 같은데...참가:

public static int nthIndexOf(String str, String subStr, int count) {
    int ind = -1;
    while(count > 0) {
        ind = str.indexOf(subStr, ind + 1);
        if(ind == -1) return -1;
        count--;
    }
    return ind;
}

문자열의 N번째 오카렌스를 찾고 있는 사람

    public class NthOccuranceExample {
    
    public static void main(String[] args) {
        String str1 = "helloworld good morning good evening good night";
        String str2 = "ing";
        int n = 2;
    
        int index = nthOccurrence(str1, str2, n);
        System.out.println("index of str2 in str1 at occurrence "+ n +" = "+ index);
    }
    
    public static int nthOccurrence(String str1, String str2, int n) {
    
        String tempStr = str1;
        int tempIndex = -1;
        int finalIndex = 0;
        for(int occurrence = 0; occurrence < n ; ++occurrence){
            tempIndex = tempStr.indexOf(str2);
            if(tempIndex==-1){
                finalIndex = 0;
                break;
            }
            tempStr = tempStr.substring(++tempIndex);
            finalIndex+=tempIndex;
        }
        return --finalIndex;
    }
}

언급URL : https://stackoverflow.com/questions/19035893/finding-second-occurrence-of-a-substring-in-a-string-in-java

반응형