2014-02-16 46 views
-3
/** 
* Shortens input by only having one letter in the output. 
*If user inputs blank  answer, default is size Small. 
*/ 

if (!burgerSize.isEmpty()) { 
    burgerSize = burgerSize.trim().toUpperCase(); 
    burgerSize = burgerSize.substring(0, 1); 
} 

當我做這在我的項目之前修剪的字符串,在命令行中說:

異常線程「main」 java.lang.StringIndexOutOfBoundsException ...字符串索引超出範圍: 1

在java.lang.String.substring(String.java:1 ...)

在BurgerOrder.main(BurgerOrder.java:66)」

如果我切換行,它不會這樣做...但我的老師告訴我在子字符串之前修剪字符串。

if (!burgerSize.isEmpty()) { 
    burgerSize = burgerSize.substring(0, 1); 
    burgerSize = burgerSize.trim().toUpperCase(); 

} 

這是我原來的,它沒有錯誤。我應該保持它的方式並接受我失去的積分嗎?

更新:讓我澄清。如果用戶輸入像這樣的字母S "ssss",它將縮短並大寫爲「S」。對於像"mmmmm"等M的M也是如此。我知道我在用我的代碼做什麼。我只是想知道我的教授的建議是錯的(他正在閱讀我打印的代碼)。

+1

你明白每個是幹什麼的? –

+0

恩,是的,我在一開始就添加了評論。 – user3315017

+2

他的問題實際上是修辭性的。你得到這個錯誤的原因很充分,修剪後該字符串爲空。如果您閱讀了'substring'的javadoc,它會告訴您:IndexOutOfBoundsException - 如果beginIndex是負數,或endIndex大於此String對象的長度 –

回答

1

字符串方法isEmpty()只檢查字符串是否根本不包含任何字符,甚至不包含空格。例如,如果burgerSize = " "(請注意引號之間的空格),那麼撥打trim()將刪除該空間,並且您撥打substring(0, 1)的電話將失敗,因爲該字符串爲空,即使第一次檢查時該字符串並非空。

嘗試移動trim()是if語句上面,像這樣:

burgerSize = burgerSize.trim(); 
if (!burgerSize.isEmpty()) 
{ 
    burgerSize = burgerSize.substring(0, 1).toUpperCase(); 
} 
+0

謝謝!當我正在糾正我的錯誤時,我的老師將他的箭頭放在if語句中。 – user3315017

0

修剪刪除空格,如空格。當burgerSize以空格開始時,在那個點上它不是空的,所以它通過了不是isEmpty測試。但是,當你修剪出空間時,burgerSize變空了,所以嘗試取第一個字母失敗。先嚐試修剪,然後檢查是否爲空。

祝你好運!

+0

謝謝!我的老師在他把箭放在哪裏是在if語句中,讓我困惑。現在更有意義。 – user3315017

0

爲了安全起見,你應該做的子之前修剪的字符串。試想一下:

/** 
    <P>{@code java TrimBeforeSubstrXmpl}</P> 
**/ 
public class TrimBeforeSubstrXmpl { 
    public static final void main(String[] igno_red) { 
     test("sssssssss"); 
     test(" sssssssss"); 
    } 
    private static final void test(String s_s) { 
     System.out.println("Testing \"" + s_s + "\""); 

     s_s = s_s.substring(0, 1); 

     System.out.println(" Substring: \"" + s_s + "\""); 

     s_s = s_s.trim().toUpperCase(); 

     System.out.println(" Trimmed then uppercase: \"" + s_s + "\""); 
    } 
} 

輸出:

[C:\java_code\]java TrimBeforeSubstrXmpl 
Testing "sssssssss" 
    Substring: "s" 
    Trimmed then uppercase: "S" 
Testing " sssssssss" 
    Substring: " " 
    Trimmed then uppercase: "" 
+0

現在有道理,非常感謝。 – user3315017