2013-01-05 107 views
-1

這是我的代碼。當我打印字符串cmd時,它打印出「打印」,但是,如果statemnet仍然不能運行。這裏是我的代碼:Java string.equals if statement not working

public static void main(String[] args) throws InterruptedException { 
    String url = "http://xboxfl.co/java/inc/command.txt"; 
    String cmd = Methods.getContents(url, "UTF-8"); 
    System.out.println(cmd); 
    if(cmd.equalsIgnoreCase("print")){ 
     System.out.println("it works"); 
    } 
} 

希望有人可以提供幫助。謝謝!

+0

如果將cmd更改爲cmd =「print」,它可以正常工作,什麼是方法?你能否提供methods.getContents的代碼) – Mark

+0

什麼是'Methods.getContents'?那是哪裏? – Coffee

+0

如果你運行上面的src,你的代碼的輸出是什麼? – Jayamohan

回答

7

嘗試:

if(cmd.trim().equalsIgnoreCase("print")) 
{ 
    System.out.println("it works"); 
} 

trim()刪除字print周圍的任何尾隨空格,如果有的話。

+0

接縫工作。謝謝! – user1947236

2

你應該修剪它,這可能是你的字符串之前或之後你有空間或新線charachter。

0

您是否檢查過您的cmd變量是否有空格?

1

使用波紋管修剪,避免可能nulPointerException

if(cmd!=null && cmd.trim().equalsIgnoreCase("print")) 
    { 
    System.out.println("it works"); 
    } 

編輯或

if(cmd!=null && "print".equalsIgnoreCase(cmd.trim())) 
    { 
    System.out.println("it works"); 
    } 
+0

+1你以前的版本比較簡單;)'「print」.equalsIgnoreCase(cmd.trim())''。 –

+0

嗯,但不得不檢查命令是空的,因爲cmd.trim()可以拋出NPE – Suranga

+0

啊,你是對的! –

1

String.equals確實工作。

String.equals不起作用」的最常見原因是其中一個字符串中存在前導空格和/或尾隨空格,而另一個字符串中沒有空格。問題是很容易錯過診斷跟蹤打印中的空白字符。 (我通常在traceprints中引入字符串值來引起任何空白,如果仔細觀察,調試器也會顯示實際字符)。

另一個更不常見的原因是被比較的字符串之一包含字符看起來像另一個字符串中的相應字符,但實際上不是。例如,Unicode希臘文和西里爾文的代碼頁包含看起來像拉丁字母那樣的,但實際上是不同的字符。由於Unicode支持兩種不同的表示方式,因此可能會出現重音字符的類似問題。