簡體   English   中英

為什么我的字符串比較不起作用?

[英]Why doesn't my string comparison work?

好的,這很愚蠢,但是wtf還在繼續嗎?

我在Servlet中有一個String變量,它接受參數的值,並基於該值進行測試以執行某些操作,但是if無法正常工作。 問題是什么?

 String action = request.getParameter("action");
    System.out.println("Action: " + action);
// I put 2 ifs to be sure, but not even one is working
    if(action.equals("something"))
            {
                System.out.println("hey");            
            }
    if(action.trim() == "something")
            {
                System.out.println("hey");
            }

在控制台上,System.out.println向我顯示了動作的價值是“某物”

Action: something

您的第二個比較是錯誤的。 您還應該使用equals代替== ,如下所示:

if (action.trim().equals("something"))

==運算符比較(String)對象的引用 ,在正常情況下, 相等的字符串不會自動具有相同的引用,即它們是不同的對象。 (除非兩者都已內部化 ,但通常不應該考慮)

除此之外,您的示例可以正常工作,並且第一個比較有效。 嘗試修復第二個比較。 如果可行,您發現了問題。 如果不是,請嘗試使用調試器並仔細檢查所有內容。

PS:比較文字字符串和動態字符串對象時,最好對文字字符串調用equals方法:

"something".equals(action)

這樣,當字符串對象為null時,可以避免NullPointerExceptions。

您的第二個條件不可能像現在這樣-您正在測試通過trimming action創建的字符串對象是否與字符串文字"something" 僅當在其他位置將action設置為相同的文字值時,才為true。 請改用"something".equals( action.trim() )

您的第一個條件是正確的, action字符串中的字符是字符"something" 如果不是真的,那就不是。 將其聲明為測試,記錄,打印或在調試器中查看。

如果打印字符串進行調試,請使用類似System.out.println ( "String = >" + string + "<" ); 因此很明顯是否有尾隨空格。

Java中的字符串比較不能通過==完成。

您必須使用String.equals()String.compareTo() -

順便說一句,當兩個字符串相等時, String.compareTo()返回0String.equals()返回true

參見: http : //java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#equals(java.lang.Object)

我的猜測是您有在println中不顯示的尾隨或前導空格。

將此與您正在使用action.trim() == 'something'的事實結合起來,意味着此測試也將無法進行。

按照其他人的建議將.equals("something")切換為.equals("something") ,它可能會起作用。

通過將if子句切換為首先具有字符串文字,可以更好地防止空值。

但是,由於您似乎還想防止參數值出現空格,因此您也可以使用Apache Commons Lang的 StringUtils.trimToEmpty對參數值進行安全的空修剪:

String action = StringUtils.trimToEmpty(request.getParameter("action"));

System.out.println("Action: " + action);

if("something".equals(action)) {
   System.out.println("hey");            
}

只是一個瘋狂的猜測:可能是這些“內容”之一包含西里爾字母,看起來與拉丁字母相同。 在這種情況下,它可能是“ o”。

嘗試這個 :

String action = request.getParameter("action");
System.out.println("Action: " + action);

if(action.trim().equals("something"))
{
    System.out.println("hey");            
}

equals方法比較字符串以獲取對象標識,而不比較內容。 要比較兩個字符串的內容,請使用compareTo方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM