查詢字串中指定字元的第一個下標_程式碼的優雅寫法
阿新 • • 發佈:2018-12-12
刷
leetCode
有一個題目需要實現String.indexOf()
的原始碼,好奇之下在Intellij IDEA
中查看了它的源代,意外地發現原始碼中關於在字串中查詢指定字元的下標的優雅程式碼(至少比我寫的優雅),於是乎我打算開個貼記錄一下。
String.indexOf(str)
的原始碼:
//解釋一下:在原始碼中 indexOf(str) 呼叫了下面這個過載的方法去實現,
//前三個引數的 source 指的是原字串的相關引數,
//接下來的三個引數的 target 指的是待查詢的目標字串的相關引數。
//無關程式碼我則用省略號代替。
static int indexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
//......
char first = target[targetOffset];
int max = sourceOffset + (sourceCount - targetCount);
for (int i = sourceOffset + fromIndex; i <= max; i++) {
/* Look for first character. */
if (source[i] != first) {
while (++i <= max && source[i] != first);
}
//......
}
抽出來的優雅程式碼則是:
/* Look for first character. */
if (source[i] != first) {
while (++i <= max && source[i] != first);
}
我以前的寫法是:
if(source[i] != first) {
for( ; i <= max; i++) {
if(source[i] == first) {
break;
}
}
}
相比之下,一句 while
程式碼代替了我專門開了個 for
迴圈+ if
+ break
所實現的功能(已寫單元測試測試過兩段程式碼的功能,是一樣的)。
個人覺得原始碼還是優雅一點,開個貼記錄一下。