2016-03-15 39 views
0

我有一個Java和Android Studio的問題;下面的代碼將是一個退格鍵:爲什麼StringIndexOutOfBoundsException與subSequence?

else if(view == btnBackspace){ 
    int expressionLength = expression.length() - 2; 
    String expressionNew = newExpression.subSequence(0, expressionLength); // new expression is the t 

    editText.setText(expressionNew); // prints out text 
} 

我試圖做一個退格鍵,我不知道這是使這個更好的辦法。因此,其子序列方法返回的我,是一個字符序列,然後我把.toString()

String expressionNew = newExpression.subSequence(0, expressionLength).toString(); 

但它不工作!該應用程序編譯,但當我按下我的退格按鈕應用程序停止和終端指出以下異常:

FATAL EXCEPTION: main 
java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=-2 
at java.lang.String.startEndAndLength(String.java:583) 
at java.lang.String.substring(String.java:1464) [...] 

謝謝!

+1

貌似'expression'是空的。 – VolkerK

+0

我已經把價值之前。 expression.length()返回一個正確的值 –

+0

但是'length = 0; regionStart = 0; regionLength = -2'是相當不明智的。 – VolkerK

回答

3

檢查你想先打電話的字符串。

if(!newExpression.isEmpty() && newExpression.length() > expressionLength) { 
    String expressionNew = newExpression.subSequence(0, expressionLength).toString(); 
} 
0

在應用字符串運算符之前檢查length。試試這個:

int expressionLength = expression.length() - 2; 
if(expressionLength>0) 
{ 
    String expressionNew = newExpression.subSequence(0, expressionLength).toString(); // new expression is the t 
    editText.setText(expressionNew); // prints out text 
else { 

    editText.setText("Empty expression string"); 
} 
0

這就是,如果你想知道

我正在重置了var表達式和正確的代碼是這樣的:

else if(view == btnBackspace){ 
    int expressionLength = expression.length() - 1; 
    if(!expression.isEmpty() && expression.length() > expressionLength) { 
     String expressionNew = expression.subSequence(0, expressionLength).toString(); 
     editText.setText(expressionNew); 
    } 
    else { 
     editText.setText("Empty expression string"); 
    } 
} 
相關問題