• ベストアンサー

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ではよくあることででしょうか?

  • Java
  • 回答数5
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

なるほど、その部分文字列だけを考えると言われるとおりですが、 文字列を始めから少しずつ次々と処理をしていくことが良くあります。(ループ処理など) 「endパラメータ」といわれているのが、その部分文字列の終わりを指しているのではなく、 次の処理のための最初の位置を表していると考えたほうがいいのではないでしょうか。

その他の回答 (4)

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.5

このように考えてみてはどうでしょう。 文字と文字の間に番号を振る。"ABCDE"なら  0 1 2 3 4 5   A B C D E str.substring(2,4) は、2~4の "CD" が返ってくる。

  • nakatyuu
  • ベストアンサー率20% (2/10)
回答No.4

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)
回答No.3

autyさんに補足して… 実際にいろいろ仕事をしていると、その仕様のほうが便利なんですよ、いろいろ。質問者も、経験を通じて理解できると思います。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

そもそもJavaのそれとPerlのそれとでは数字の意味が違いますよ。 Javaの方は substring(開始位置, 終了位置) ですが Perlの方は substr(対象文字列, 開始位置, 長さ) です。 終了位置でも取り出される部分の次まで指定するじゃないか と思われるかもしれませんが、~以下 よりは ~未満として 処理した方が一貫性が出るとかメリットが多いのです。 #1の方の回答にあるのもその一つですね。

関連するQ&A

  • Javaのコンストラクタについて教えてください

    Javaを勉強している初心者です。 次のようなプログラムがあります。 このプログラムでclass aおよびclass bのデフォルトコンストラクタ a() {}とb() {}をコーディングしていないとコンパイルエラーになります。 b() {}についてはclass bのパラメータのあるコンストラクタb(String s)がサブクラスclass cから明示的に呼ばれていないのでデフォルトコンストラクタb() {}をコーディングしないとエラーになる…と考えればよいのでしょうか。 それでは、a() {}はなぜ必要なのでしょうか。 どなたか教えてください。 class a { a() {} a(String s) { System.out.println("In a's constructor..."); System.out.println(s); } } class b extends a { b() {} b(String s) { super(s); System.out.println("In b's constructor..."); System.out.println(s); } } class c extends b { c(String s) { System.out.println("In c's constructor..."); System.out.println(s); } public void some() { System.out.println("something..."); } } public class appJ01 { public static void main(String args[]) { c obj = new c("Hello from Java!"); } } 

  • java 入力命令

    以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }

  • JAVAについて

    現在JAVAについて学んでいるのですが、下記のソースが実行出来ません。どなたかわかる方、回答宜しくお願いいたします。 public class Lound { void main(String[] args) { String rtn = methWithParamReturn(3); if(rtn.equals("0")) System.out.println("0あかんよ"); else System.out.println(rtn); } public String methWithParamReturn(int x) { System.out.println(x); x= x*x; String str = String.valueOf(x); return str; } }

  • javaについて

    以下のようにキーボードから入力していくプログラムを試行しているのですが、エラーが出てくるので行き詰まっています。 理想的にはキーボードに”あいう”エンター”えおか”エンターと打ち込んだら str[0]=あいう str[1]=えおか と表示させていきたいのですが、よろしくお願いします。 import java.io.*; import java.lang.*; import java.net.*; import java.awt.*; class gugu2 { public static void main(String[] args) throws IOException { int i=0; while(i<2){ System.out.println("キーワード入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); char str[] = input.toCharArray(); System.out.println("キーワードは" + str[]); i=i+1; } for(i=0;i<2;i++){ System.out.println(str[]); } } } これがエラー表示です。 gugu2.java:17: '.class' がありません。 System.out.println("キーワードは" + str[]); ^ gugu2.java:21: '.class' がありません。 System.out.println(str[]); ^ エラー 2 個

    • ベストアンサー
    • Java
  • Javaの初心者です

    Javaの勉強をしています。 以下のコードを作成しました。 import java.util.*; public class Main { public static void main(String[] args) { int flg = 0; Scanner sc = new Scanner(System.in); String str = sc.next(); String data = sc.next(); if (data == str) { flg = 1; } if (flg == 1) { System.out.println("YES"); } else { System.out.println("NO"); } } } 標準入力に A A を入力して実行しました。 YESと表示されるのを期待していたのですが、NOと表示されます。 何が悪いのでしょうか?

    • ベストアンサー
    • Java
  • プログラム中でjavaのバージョンを「数値」で取得したい

    1.5以上の場合などと分けたいので、数値で取得したいです。 下記のメソッドで文字列として取得し、substringなどで先頭3文字を取得し数値に変換などの方法しかないのでしょうか? System.out.println(System.getProperty("java.version")); System.out.println(System.getProperty("java.vm.version")); System.out.println(System.getProperty("java.specification.version"));

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えてください!

    //Sub.java package prac; class Super{ public void A(){ String address = new String("Osaka"); System.out.println(address); } } public class Sub extends Super{ public void A(){ String address = new String("Kyoto"); System.out.println(address); } public int A(String tmp){ return Integer.parseInt(tmp); } } このプログラムを他のクラスのmain関数から呼び出す場合どのようなコードになりますか?また、間違えているところがあれば合わせて教えてください。

    • ベストアンサー
    • Java
  • Javaプログラミング1001Tipsより。

    Javaプログラミング1001Tipsの書籍にある例文をコンパイルしようとすると。 注:practice.javaは推奨されないAPIを使用またはオーバーライドしています。 注:詳細については-deprecationオプションをしていして再コンパイルしてください。 というエラーがでます。普通にコンパイルして実行するだけでは駄目なのでしょうか? import java.util.Date; class practice { public static void main(String arg[]) { Date now= new Date(); System.out.println(now.toGMTString().substring(12)); System.out.println(now.getHours() + ":" + now.getMinutes()); } }

  • 下記のようなjavaのプログラムで、* や / を入力しても,

    下記のようなjavaのプログラムで、* や / を入力しても, 必ず判定がfalseのほうになるんですけど、どうすれば良いですか? あまりjavaには詳しくないので、分かりやすく教えていただければ幸いです。お願いします。 import java.io.*; public class test{ public static void main(String[] args) throws IOException{ BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String a; a = input.readLine(); if((a == "*") ^ (a == "/")){ System.out.println("OK"); }else{ System.out.println("エラー"); } } }

    • ベストアンサー
    • Java
  • Java

    昨日から「やさしいJava」という本をつかって勉強を始めた者です。 最初からなにか上手くいかないので、アドバイスいただけたら嬉しいです。 public class Welcome{ public static void main(String[] args){ System.out.println("Welcome to Java!"); System.out.println("Javaの世界へようこそ!"); } } というソースを作りました。 これを javac Welcome.java とやって、そこまではよさそうなのですが、そのあと、 java Welcome をやったらエラーになります。 ソースも間違いないと思うのですが、よくわかりません。 ファイルの仕方に問題があるのかなとも思っています。 どうか、よろしくお願い致します。

    • ベストアンサー
    • Java