- ベストアンサー
Javaのsubstringのendパラメータについて
Javaでは、endパラメータが何故+1なのでしょうか? String a = "ABCDEFG"; System.out.println(a.substring(0,0+1)); // A System.out.println(a.substring(1,2+1)); // BC System.out.println(a.substring(3,5+1)); // DEF perlなどでは、以下のようだった気がしますが・・・ substring(a, 0, 0); substring(a, 1, 2); substring(a, 3, 5); 理由をご存知の方教えてください。 こういうのはJavaではよくあることででしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
なるほど、その部分文字列だけを考えると言われるとおりですが、 文字列を始めから少しずつ次々と処理をしていくことが良くあります。(ループ処理など) 「endパラメータ」といわれているのが、その部分文字列の終わりを指しているのではなく、 次の処理のための最初の位置を表していると考えたほうがいいのではないでしょうか。
その他の回答 (4)
- thamansa
- ベストアンサー率40% (95/232)
このように考えてみてはどうでしょう。 文字と文字の間に番号を振る。"ABCDE"なら 0 1 2 3 4 5 A B C D E str.substring(2,4) は、2~4の "CD" が返ってくる。
- nakatyuu
- ベストアンサー率20% (2/10)
javadocを読みましょう。 http://download.java.net/jdk/jdk-api-localizations/jdk-api-ja/builds/latest/html/ja/api/java/lang/String.html#substring(int,%20int) 理由は書いていないけど、使い方は書いてあります。 よくあるとかじゃなくて、そういう決まりなんですよ。
- _ranco_
- ベストアンサー率58% (126/214)
autyさんに補足して… 実際にいろいろ仕事をしていると、その仕様のほうが便利なんですよ、いろいろ。質問者も、経験を通じて理解できると思います。
- sakusaker7
- ベストアンサー率62% (800/1280)
そもそもJavaのそれとPerlのそれとでは数字の意味が違いますよ。 Javaの方は substring(開始位置, 終了位置) ですが Perlの方は substr(対象文字列, 開始位置, 長さ) です。 終了位置でも取り出される部分の次まで指定するじゃないか と思われるかもしれませんが、~以下 よりは ~未満として 処理した方が一貫性が出るとかメリットが多いのです。 #1の方の回答にあるのもその一つですね。