5

重複の可能性:
from インデックスは包括的であるのに、end インデックスは排他的であるのはなぜですか?

substring()メソッド =>String substring(int beginIndex, int endIndex)

説明:

この文字列の部分文字列である新しい文字列を返します。最初の整数引数は、最初の文字のインデックスを指定します。2 番目の整数引数は、最後の文字のインデックス - 1 です。

次のコードを見てください。

String anotherPalindrome = "Niagara. O roar again!"; 
String roar = anotherPalindrome.substring(11, 15); 

出力:roar

JVM がint endIndex1 を減算しない場合は、代わりに を使用できますsubstring(11,14)。その方がはるかに便利で、エラーが発生しにくい (人間側) ではないでしょうか? endIndex説明を注意深く読まなかったとしたら、それが単なる通常のインデックスであると思ったときに、(私がしたように) 30 分間頭をかきむしることになったかもしれません。Java 言語の作成者が 1 を引く理由は何ですか?

4

4 に答える 4

7

これにはいくつかの利点があります。

s.substring(0, s.length())

常に正しいです。また:

s.substring(i, j)

結果の文字列のサイズは常にj - iです。より具体的s.substring(0, j)には、常にj文字を返します。n最後に、これは、インデックスの後に文字を取得したい場合は、i単に次のように言うことを意味します:

s.substring(i, i + n)

文字列のサフィックス (最後のn文字) を抽出するのも簡単です:

s.substring(s.length() - n, s.length())

たとえば、ファイル拡張子を抽出します。

s.substring(s.indexOf('.') + 1, s.length())
于 2012-12-08T21:07:00.690 に答える
3

文字自体ではなく、文字間のギャップに番号を付けることと考えてください。

 N i a g a r a . _ O  _  r  o  a  r  _  a  g  a  i  n  !
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

明らかに、はとの間のroar部分文字列です。1115

于 2012-12-08T21:10:37.170 に答える
1

これは次の質問と同じです。

「Java の配列が 1 ではなく 0 から始まるのはなぜですか」。

実際、配列は 0 から始まるため、通常は次のように記述します。

for(int i = 0; i < ar.length; i++)

同様に、start から始まり end で終わる部分文字列が必要な場合は、次のようなものを使用します。

for(int i = start; i < end; i++)
{
    //get ar[i]
}
于 2012-12-08T21:07:34.043 に答える
0

substringは、indexOfメソッドと一緒に使用されることが多いようです。このような場合、見つかったインデックスをendIndexパラメーターとして直接使用して、文字列を区切り文字列まで切り取ることができます。例:

    String text = "filename.ext";

    int pos = text.indexOf(".ext");
    String name = text.substring(0, pos);
    assertEquals("filename", name);

そのような場合、pos変数にはすでにドットのインデックスが含まれており、サブストリングはドットまでの文字列を切り取ることができます。

于 2012-12-08T21:12:42.333 に答える