반응형
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
반응형
'programing' 카테고리의 다른 글
문자열이 여러 접두사 중 하나로 시작되는지 확인하려면 어떻게 해야 합니까? (0) | 2023.01.04 |
---|---|
Mysqli bind_param을 날짜 및 시간 열과 함께 사용하시겠습니까? (0) | 2023.01.04 |
Python != 연산 vs "없음" (0) | 2023.01.04 |
Python에서 빈 원으로 산점도를 만드는 방법은 무엇입니까? (0) | 2023.01.04 |
python 키워드 "with"는 무엇에 사용됩니까? (0) | 2023.01.04 |