2016-12-24 27 views
-3
import java.util.*; 

public class Test2{ 
    public static void main(String[] args){ 
    String s1 = "Delivery"; 
    String s2 = s1.substring(8); 
    System.out.println(s2); 
    } 
} 

爲什麼這會給出一個空格?第八位不應該出界嗎?java中的String.substring()

此外,爲什麼s1.charAt(8)會提示outOfBound錯誤?他們是否使用不同的方法來處理這個問題?

+1

不,可以在字符串末尾開始子字符串,它只是給你空字符串'「」'(字符串長度爲0)。 –

+1

檢查[Javadoc](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int))。 –

+3

該文檔顯示「拋出:IndexOutOfBoundsException」 - 如果beginIndex爲負數或大於此String對象的長度。「您可以採取這種方式來表示嚴格較大。 'beginIndex'允許等於length(在你的例子中都是8)。 –

回答

1

string.substring(int id)返回從索引id開始的字符串的子字符串。 id是一個索引,但不是位置!

請記住,索引從0開始計數! 請檢查Javadoc

subString方法的部分看起來像這樣:

int subLen = value.length - beginIndex; 
if (subLen < 0) { 
    throw new StringIndexOutOfBoundsException(subLen); 
} 
+1

那不,它不會返回一個字符,在這個例子中是不可能的。它返回一個字符串(在這個例子中是一個空字符串)。 –

3

substring方法拋出StringIndexOutOfBoundsException只有當beginIndex大於字符串length更大如圖中下面的代碼從String採取substring方法):

int subLen = value.length - beginIndex; 
if (subLen < 0) { 
    throw new StringIndexOutOfBoundsException(subLen); 
} 

此外,同樣已經在Javadoc解釋好,你可以看看here

返回一個新字符串,它是此字符串的一個子。子字符串 以指定索引處的字符開頭,並擴展到該字符串的 結尾。實例:

「愁」 .substring(2)返回 「快樂」

「哈比森」 .substring(3)返回 「野牛」

「空虛」 .substring(9)返回 「」(一個空字符串)

+0

謝謝!它有助於。 –

0

這將引發IndexOutOfBoundsException異常 - 如果beginIndex爲負或大於您的字符串的長度。在你的情況beginIndex是8和字符串的長度也是8.這就是你沒有得到IndexOutOfBoundsException的原因。

希望這會有所幫助!

0

建議您運行在一個IDE和調試 步進入方法串碼和您的查詢就會回答

檢查子串方法的源代碼

public String substring(int beginIndex) { 
     if (beginIndex < 0) { 
      throw new StringIndexOutOfBoundsException(beginIndex); 
     } 
     int subLen = value.length - beginIndex; 
     if (subLen < 0) { 
      throw new StringIndexOutOfBoundsException(subLen); 
     } 
     return (beginIndex == 0) ? this : new String(value, beginIndex, subLen); 
    } 

這裏:

  1. 的開始索引爲8,
  2. 8是不小於0
  3. subLen = 0和不小於0

嘗試通過9到子,你會得到

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
    at java.lang.String.substring(String.java:1875) 
    at com.iqp.standalone.Sample.main(Sample.java:14) 
0

請參閱Java文檔中關於字符串在這裏:Java Strings Doc

s1 lenght是7.

charAt方法看起來像這樣:

public char charAt(int index) { 
    if ((index < 0) || (index >= value.length)) { 
     throw new StringIndexOutOfBoundsException(index); 
    } 
    return value[index]; 
} 

當然,它會給你錯誤!

相關問題