2013-03-13 68 views
2

我有這個字符串:得到一個字符

String code="abc"; 

我想substring方法提取的「C」從這個字符串,但它不工作:

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

此代碼返回一個錯誤

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

但我不知道爲什麼?

回答

14

您需要閱讀the documentation for substring - 第二個參數是不是一個長度,它的結束索引(不包括)。

參數:
beginIndex - 開始索引(包括)。
endIndex - 結束索引,獨佔。

如果有疑問,閱讀文檔...

還要注意的是,如果你只是想獲得最後一個字符,你可以只使用單參數過載,從返回一個字符串給定起點到字符串的結尾:

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

或者你可以把它作爲一個單一的字符:

char lastCharacter = text.charAt(text.length() - 1); 
+0

當然,你是第一個) – bsiamionau 2013-03-13 15:33:02

+0

@喬恩飛碟雙向!但是當我這樣做:substring(2,1);我沒有得到任何東西! – Fcoder 2013-03-13 15:33:15

+3

@FarhadShirzad:不,你會得到一個異常......如果你使用'substring(2,3)',你會得到最後一個字符。 – 2013-03-13 15:33:37

7

第二個參數不是長度,它是an end index

String#substring(int beginIndex, int endIndex) 
0

的從0開始的索引,您可以嘗試

String code="abc"; 
String getsmscode=code.substring(2); 
+0

這不會提取最後一個字符。 OP剛剛誤解了第二個參數。 – 2013-03-13 15:34:21

0

我覺得子需要開始索引或開始索引和結束索引作爲參數:

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

你給它一個開始指數大於而不是結束指數,因此它會變得混亂,因爲返回的長度是負值。交換1和2。

+1

交換1和2將返回b。結束索引字符被排除。 – 2013-03-13 15:37:37

+0

是的。我更加反應了人們缺乏對功能預期的參數的理解,而不是提供一個確切的解決方案。道歉,下次我會遵守規則。 – 2013-03-13 19:06:31

0

使用也可以達到這個效果。

String getsmscode = code.substring(2,3); 

方法描述

public String substring (int start, int end) 

返回包含的字符從該字符串的子序列的字符串。返回的字符串共享此字符串的後備數組。

參數

開始 - 偏移量的第一個字符。

end-最後一個字符後面的偏移量。

返回包含字符從開始到結束的新字符串 - 1

拋出

3

以上傢伙已經充分回答了你的問題,但只是在閱讀API的一些技巧。

方法通常以public一詞開始,然後包含返回類型......這是什麼類型的數據將被返回。如果預計沒有任何回報是無效的。

然後出現方法的名稱和兩個括號。

括號之間是它接受的參數類型。

這個特殊的方法它接受兩個整數。這些幫助保持一個索引,你想保持多少字符串

索引是一個重要的概念,要理解,很難描述它是如何工作的話,但看在api描述列表幫助中的例子幫助。

index-1通常意味着從0開始計數,所以在字符串「Hello World」中,H的索引爲0,d的索引爲10.注意,只有9個字母,但我們仍然必須包含空格作爲字符,因此它是索引在這種情況下是5.

重要的是要注意api提及排除和包括在參數說明中。這只是表示返回的字符串將包含由第一個參數索引的字母,但不包括由第二個參數索引的字母。

如果你需要做的就是提取一個字符串,最後一個字母無論字符串大小了多久,一個簡單的解決方案是

stringName.substring(stringName.length()-1); 
+1

感謝你的完美單詞......謝謝。我解決了我的問題 – Fcoder 2013-03-13 18:41:37