2012-11-28 89 views
1

我有一些代碼來顯示按鈕上的字符串的前十個字符。但是當字符串少於10個字符或null時,我會發現boiunds異常錯誤。問題SubStrings和Outofboundsexception錯誤

我認爲一個簡單的IF語句可以修復它,但似乎沒有。有人能指出我的問題嗎?由於

我與Android開發者檢查的參考,它沒有說明的方式來解決這個問題

Button item1 = (Button) findViewById(R.id.buttontext1); 
String ellipsed = PrefConnector.readString(this, PrefConnector.ONE, null); 

if(ellipsed.length() < 1) ellipsed = "Touch to edit"; 
if(ellipsed.length() > 10) ellipsed = ellipsed.substring(0, 10) + "..."; 

item1.setText(ellipsed); 
+0

發表您的日誌和找出它破裂的地方。是否「省略」非空? – 323go

回答

1

如果你得到一個空指針異常,那麼就必須在那裏ellipsed是空的情況。即使橢圓不會爲空,上面的代碼也會出現問題:如果省略了橢圓。()< 10,則將其更改爲「輕觸以編輯」,但接下來檢查長度> 10,然後選擇「觸摸到編輯」。長度()> 10,所以短字符串總是落得‘觸摸到e ...’

在任何情況下,我想你想說的是

if (ellipsed==null || ellipsed.length()==0) 
    ellipsed="Touch to edit"; 
else if (ellipsed.length()>10) 
    ellipsed=ellipsed.substring(0,10)+"..."; 
+0

謝謝!這似乎奏效了。您可能需要爲將來通過Google搜索訪問此頁面的用戶編輯答案。你還沒有完成的聲明,IE添加在需要的地方的分號! – cw1998

+0

哎呀,謝謝你的修復。當你的大腦被VB感染時,會發生這種情況。 – Jay

0

你爲什麼不嘗試...

if(ellipsed.length() < 1) 
     ellipsed = "Touch to edit"; 
    else 
     ellipsed = ellipsed.substring(1, ellipsed.length()) + "..."; 
+0

這沒有奏效。字符串爲空時仍然爲空例外 – cw1998

0

基本上你取前10個字符的子字符串,並且想知道爲什麼如果嘗試獲取長度小於10的字符串的前10個字符,那麼爲什麼會出現異常?從Oracle文檔:

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

+0

我知道,但我正在尋找一種方法來通過此 – cw1998

0
if(ellipsed != null && ellipsed.length() >10) 
    ellipsed = ellipsed.substring(0, 10) + "..."; 
else 
    ellipsed = "Touch to edit"; 
+0

+1,正確的答案。 (我沒有日常投票,所以我實際上無法提出您的答案,對不起)。 – Vulcan

+0

很高興幫助!你可以接受它!大聲笑 –

+0

我不能接受它,我不是那個問這個問題的人:P – Vulcan