Javaに、他の言語のように、末尾から開始してlength()を参照として持つcharのindexOfを見つける方法はありますか?
new String("abcd").reverseIndexOf("d"(,[4 or -0]))
or new String("abcd").indexOf("d",-0) // Should return a (-)1
...明白な代わりに
new String("abcd").indexOf("d") - newString("abcd").length()
ありがとう!
lastIndexOf(int ch)
は、最後から開始して後方検索し、最後に出現した絶対インデックスを返します。次に、文字列の長さからその数を差し引いて、それが本当に必要な場合はそれを無効にすることができます。
特定のインデックスから逆方向に検索する場合は、 lastIndexOf(int ch, int fromIndex)
を使用することもできます。
負の数を渡すとどうなるかについての質問に答えるには、Stringクラスのソースコードを調べます。結局のところ、最終的に呼び出されるindexOf
実装は、負のfromIndex
値をゼロにリセットします。
static int indexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
if (fromIndex >= sourceCount) {
return (targetCount == 0 ? sourceCount : -1);
}
if (fromIndex < 0) {
fromIndex = 0;
}
...
2番目の例に戻る:
"abcd".indexOf("d",-0)
... Javaはint
0
とint
-0
(どちらも0として表されます)。検索文字列が見つからない場合、String.indexOfは通常-1を返すためです。ただし、いくつか注意点があります:
String.indexOf
は通常、検索文字列が見つからない場合は-1
を返します。ただし、-1
は新しい実装では有効なインデックスであるため、新しいコントラクトを定義する必要があります。検索文字列が見つからない場合、Integer.MIN_VALUE
が返されるようになりました。int
-0
をテストできないため、最後の文字のインデックスを-0
として参照することはできません。そのため、-1
を使用して最後の文字のインデックスを参照し、そこから逆方向にカウントを続けます。-1
からカウントダウンを開始します。コードを簡略化することもできますが、デバッガーで簡単にステップ実行できるように、意図的に冗長にしています。
package com.example.string;
public class StringExample {
public static int indexOf(String str, String search, int fromIndex) {
if (fromIndex < 0) {
fromIndex = str.length() + fromIndex; // convert the negative index to a positive index, treating the negative index -1 as the index of the last character
int index = str.lastIndexOf(search, fromIndex);
if (index == -1) {
index = Integer.MIN_VALUE; // String.indexOf normally returns -1 if the character is not found, but we need to define a new contract since -1 is a valid index for our new implementation
}
else {
index = -(str.length() - index); // convert the result to a negative index--again, -1 is the index of the last character
}
return index;
}
else {
return str.indexOf(str, fromIndex);
}
}
public static void main(String[] args) {
System.out.println(indexOf("abcd", "d", -1)); // returns -1
System.out.println(indexOf("adbcd", "d", -2)); // returns -4
}
}
String.lastIndexOf()
メソッドを使用するだけです:
String s = "abcd";
int rindex = s.lastIndexof('d');
System.out.println(rindex); // print 0
あなたは簡単に文字列を逆にすることができます:
String s="abcd";
StringBuilder reverseS = new StringBuilder(s).reverse();
System.out.println(reverseS.indexOf("d")); //print 0
System.out.println(reverseS.indexOf("a")); //print 3
System.out.println(reverseS.indexOf("d",1)); //print -1