2013-10-28 77 views
13

可以使用負數作爲Java中string.substring的結束索引嗎?在Java中,你可以使用子字符串嗎?

例子:

String str = "test"; 
str.substring(0, str.indexOf("q")); 

編輯:無處在的javadoc它直接說endIndex的不能爲負數。有其他語言和庫中的子字符串的實現允許消極的endindex,但不允許負的beginindex,所以這似乎相關,這是明確表示。它也不以任何方式暗示。 (編輯:好吧,它是鬆散的暗示,但我和顯然其他誰親自問我這個問題仍然覺得它很不清楚,這是一個簡單的Q + A,我提供了不是我實際上試圖找到答案這個微不足道的問題)

回答

28

沒有。負指數爲,不允許爲

String#substring(int beginIndex, int endIndex)

拋出:IndexOutOfBoundsException - 如果的beginIndex爲負,或endIndex大於此String對象的長度大,或的beginIndex大於endIndex的大。

儘管文檔沒有直接說明endIndex不能是負數,但這可以派生出來。重寫的相關要求債收益率這些事實:

  1. 「的beginIndex不能爲負」 - >beginIndex >= 0
  2. 「的beginIndex必須小於或等於ENDINDEX」 - >endIndex >= beginIndex

因此,它是一個要求endIndex >= beginIndex >= 0這意味着endIndex 不能爲負數。


反正str.substring(0, -x)可以平凡改寫爲str.substring(0, str.length() - x),假設我們的負端指數是什麼意思。同樣的想法。原來的約束條件仍然適用。


奇怪的是,String#subSequence明確禁止負endIndex的。鑑於此,它認爲可以清理文檔,使兩種方法共享相同的簡化前提條文。 (作爲獎勵:「Java 7」subSequence文檔中還有一個重要的輸入錯誤。)

2

,使用substring的endindex爲負數以及大於字符串長度的數字將導致StringIndexOutOfBoundsException。

(你不會相信這是多麼不容易找到一個直接回答這個在網絡上)

相關問題