JDK 소스 코드-String 의 index 해석
String 의 색인 은 index Of,lastIndex Of 가 있 는데 주로 문자,문자열 을 색인 합 니 다.lastIndexOf(String str,int from Index)를 쓰 려 고 합 니 다.우선 작은 코드 를 보 세 요.여기에 대응 하 는 방법 은 lastIndexOf(String str,int from Index)입 니 다.
public class StringIndexTest {
public static void main(String args[]) {
String source = "DuJingDuJingDu";
String target = "Jing";
System.out.println("source string is : " + source + "
" + "target string is : " + target);
System.out.println("source.lastIndexOf(target, 1) : " + source.lastIndexOf(target, 1));
System.out.println("source.lastIndexOf(target, 2) : " + source.lastIndexOf(target, 2));
System.out.println("source.lastIndexOf(target, 6) : " + source.lastIndexOf(target, 6));
}
}
/**
* Result
* source string is : DuJingDuJingDu
* target string is : Jing
* source.lastIndexOf(target, 1) : -1
* source.lastIndexOf(target, 2) : 2
* source.lastIndexOf(target, 6) : 2
*/
코드 에서 다음 과 같은 몇 가 지 를 얻 을 수 있 습 니 다.
1:from Index,즉 제 시 된 색인 값 은 역순 의 색인 값 이 고 lastIndex Of 는 예순 의 방법 으로 검색 한 것 입 니 다.
제2:사례 에서 보 듯 이 사례 에서 source.lastIndex Of(target,2),from Index 는 2 이다.여기 서 target 과 한 글자'J'만 대응 하고 색인 에 성공 할 수 있다.from Index 는 target 첫 글자 의 색인 시작 값 임 을 알 수 있 습 니 다.
다음은 소스 코드 측면 에서 분석한다.lastIndex Of(String str)와 lastIndex Of(String str,int from Index)는 모두 아래 방법 을 인용 하여 본론 으로 들 어 갑 니 다.
static int lastIndexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex)
원본 코드 를 한 마디 한 마디 로 보면:
/**
* Code shared by String and StringBuffer to do searches. The
* source is the character array being searched, and the target
* is the string being searched for.
*
* @param source the characters being searched.
* @param sourceOffset offset of the source string.
* @param sourceCount count of the source string.
* @param target the characters being searched for.
* @param targetOffset offset of the target string.
* @param targetCount count of the target string.
* @param fromIndex the index to begin searching from.
*/
static int lastIndexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
/*
* Check arguments; return immediately where possible. For
* consistency, don't check for null str.
*/
// ,fromIndex target ;
// , fromIndex target , target , .
int rightIndex = sourceCount - targetCount;//
if (fromIndex < 0) {
return -1;
}
if (fromIndex > rightIndex) {
fromIndex = rightIndex;// fromIndex , .
}
/* Empty string always matches. */
// , , fromIndex.
if (targetCount == 0) {
return fromIndex;
}
int strLastIndex = targetOffset + targetCount - 1;// target .
char strLastChar = target[strLastIndex];
// ,min ,i .
int min = sourceOffset + targetCount - 1;
int i = min + fromIndex;
startSearchForLastChar:
while (true) {
while (i >= min && source[i] != strLastChar) {
i--;// .
}
if (i < min) {
return -1;
}
// 、 , .
int j = i - 1;
int start = j - (targetCount - 1);
int k = strLastIndex - 1;
while (j > start) {
if (source[j--] != target[k--]) {
i--;// , .
continue startSearchForLastChar;
}
}
// , , .
return start - sourceOffset + 1;
}
}
그림 을 그 리 려 고 했 는데 시간 이 촉박 해서 읽 으 려 는 모든 친구 에 게 죄송합니다.교 류 를 환영 합 니 다.비판 지적 을 환영 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.