2

私はこの文字列を持っています:

String code="abc";

メソッドによってこの文字列から「c」を抽出したいのですsubstringが、機能しません。

String code="abc";
String getsmscode=code.substring(2,1);

このコードはエラーを返します

java.lang.StringIndexOutOfBoundsException: length=3; regionStart=2; regionLength=-1

でも理由はわかりませんか?

4

6 に答える 6

14

substring のドキュメントを読む必要があります- 2 番目のパラメーターは長さではなく、終了インデックス (排他的) です。

パラメータ:
beginIndex - 開始インデックス (両端を含む)。
endIndex- 終了インデックス、排他的。

疑問がある場合は、ドキュメントを読んでください...

また、最後の文字を取得しようとしているだけの場合は、指定された開始点から文字列の末尾までの部分文字列を返す単一パラメーターのオーバーロードを使用できます。

String lastCharacter = text.substring(text.length() - 1);

または、単一の文字として取得できます。

char lastCharacter = text.charAt(text.length() - 1);
于 2013-03-13T15:31:17.893 に答える
7

2 番目のパラメーターは長さではなく、終了インデックスです。

  String#substring(int beginIndex, int endIndex) 
于 2013-03-13T15:31:11.630 に答える
3

上記の人たちはあなたの質問に適切に答えましたが、APIを読むためのいくつかのヒントです。

メソッドは通常、publicという単語で始まり、returntype...を含みます。これはどのタイプのデータが返されるかです。何も返されないと予想される場合は無効です。

次に、メソッドの名前と2つの括弧があります。

括弧の間に、それが受け入れるパラメータタイプがあります。

この特定のメソッドでは、2つの整数を受け入れます。これらは、保持したい文字列の量のインデックスを保持するのに役立ちます

インデックスは理解するための重要な概念であり、すべてがどのように機能するかを言葉で説明するのは難しいですが、APIの説明リストの例を見ると役立ちます。

index-1は通常、カウントが0から始まることを意味するため、文字列「Hello World」では、Hは0にインデックス付けされ、dはインデックス10になります。9文字しかないことに注意してください。ただし、文字としてスペースを含める必要があるため、この場合はインデックスになります。 5.5。

APIの言及では、パラメーターの説明に除外と包含があることに注意することが重要です。これは、返される文字列に最初のパラメーターでインデックス付けされた文字が含まれるが、2番目のパラメーターでインデックス付けされた文字は含まれないことを意味します。

文字列のサイズに関係なく、文字列の最後の文字を抽出するだけでよい場合、簡単な解決策は次のとおりです。

stringName.substring(stringName.length()-1); 
于 2013-03-13T16:00:12.070 に答える
0

インデックスは0から始まります。試すことができます

String code="abc";
String getsmscode=code.substring(2);
于 2013-03-13T15:31:27.437 に答える
0

部分文字列は、開始インデックスまたは開始インデックスと終了インデックスをパラメーターとして受け取ると思います。

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

終了インデックスよりも大きい開始インデックスを指定したため、返される長さが負になるため混乱しています。1と2を入れ替えます。

于 2013-03-13T15:32:47.367 に答える