0

次のコードがあります

public static void main(String args[]) throws Exception
{
    String mySite = "StackOverflow";
    System.out.println(mySite.substring(0, 4));
}

このプリントとはStac 私の理解によると、インデックスは0から始まります。

S<-0
t<-1
a<-2
c<-3
k<-4

指定すると、インデックス 0 からインデックス 4 までの文字列が必要です。Stack返されることを期待していますが、返されますStac

substring(int beginIndex, int endIndex)ソース コードを見ると、次のように書かれています。

 * @param      beginIndex   the beginning index, inclusive.
 * @param      endIndex     the ending index, exclusive.

このコンテキストで包括的および排他的とはどういう意味かを誰か説明できますか? より直感的にならないのはなぜですか?そのような行動の特定の理由を知っている人はいますか?

4

4 に答える 4

3
  • 包括的とは、そのインデックスのアイテムが含まれることを意味します。
  • Exclusiveは、そのインデックスの項目が含まれないことを意味します。

これの本当の理由は、ソース コードでそれを説明するコメントを見つける (可能性がある) か、元の作成者を見つけて尋ねる (可能性は非常に低い) 場合を除いて、推測することしかできません。

Stringその理由は、Java (および他のほぼすべての言語)の s およびs などのインデックスが 0であるためであると推測できListます (これは、あなたの質問から理解できるようですので、説明を省略します)。これらの長さは、常に最終インデックスの値よりも 1 大きくなります。ある種の「サブストリング」/「サブリスト」などの最終インデックスを除外する例やインスタンスは他にもたくさんあります。これにより、文字列/リスト/などの長さを簡単に取得できるようになります。それを終了インデックスとして渡し-1、長さが終了インデックス。

したがって、ゼロインデックスと長さの相互作用を認識した後は、ほぼ間違いなく (より) 直感的です。

Cを説明に持ち込むこの重複した質問の受け入れられた回答には、良い説明があります。

于 2013-05-23T15:38:01.600 に答える
2

Inclusiveは、そのインデックスの文字が含まれることを意味します。
Exclusiveは、そのインデックスの文字が除外されることを意味します。

基本的に、それは非常に特徴的なものまで含まれますが、含まれませんendIndex

于 2013-05-23T15:19:43.820 に答える
1

Inclusive = 文字が含まれる

排他的=文字は含まれていません

この理由は、おそらく歴史的な慣習によるものですが、私は頭の中でわかりません。

于 2013-05-23T15:19:41.903 に答える
0

「直感的」は見る人の目にあります。

コードを書くようになると、この動作が非常に便利であることがわかります。部分文字列を構築するときは、通常、その中にある最初のもののインデックスと、次のいずれかがあります。

  1. 必要な長さ。この場合endIndexstartIndex+length、または
  2. 必要な部分文字列に含まれていない最初の文字のインデックス (区切り文字など)。この場合も、既に の正しい値ですendIndex

3 番目のケースは、部分文字列内の最後の目的の文字のインデックスがある場合です。この場合は、endIndexその値に 1 を加えた値に設定する必要があります。ただし、これは 3 つのケースのうちの 1 つにすぎません (これまでのところ)。

于 2013-05-24T01:57:43.900 に答える