2012-08-30 50 views
0

我有在Java中compareTo方法的問題,這是代碼:CompareTo方法在Java怪怪

for(int i = 0; i < btFolder.size(); i++) { 

     String g = btFolder.get(i).toString(); 

     String[] subf = g.split(splitchar); 

     String s = subf[subf.length-1].toUpperCase(); 

     if(s.compareTo(bt.toUpperCase()) == 0) { 
      return g; 
     } 
    } 
    return null; //not found! 

這不會跳進if-statement,它應該因爲sbt變量是平等的,我知道是因爲我已經完成了作業並進行了調試。只是爲了找出什麼compareTo方法回報我寫這段代碼:

 String g = btFolder.get(i).toString(); 

     String[] subf = g.split(splitchar); 

     String s = subf[subf.length-1].toUpperCase(); 

     String btUp = bt.toUpperCase(); 

     int theSame = s.compareTo(btUp); 

     if(theSame == 0) { 
      putSharedPrefs("pathToBt", g); 
     } 
     return null; 

變量theSame是0,這意味着sbtUp相等。而且,the if-statement永遠不會執行!

這是怎麼發生的?有什麼好的解決方案呢?

編輯

我已經試過這太:

boolean equals = s.equalsIgnoreCase(bt); 

     if(equals) { 
      return g; 
     } 

booleantrue,但從來沒有excutes的if-statement,我也應該提到這是一個thread內完成,但是不應該引起任何問題?

+0

爲什麼不使用'String.equalsIgnoreCase'而不是'compareTo'? – maba

+0

,因爲使用它有點粗略。我希望整個字符串完全相同,順序相同,而不是字符串。這真的不是我爲什麼使用'compareTo'它應該工作的問題。 –

+2

*「變量theSame是0,這意味着s和btUp是相等的,而if語句永遠不會執行!」* =>這是不可能的。發佈一個證明你的問題的[簡短的,自包含的,正確的例子(SSCCE)](http://www.sscce.org/)將幫助你得到更好的答案。 – assylias

回答

2

在這個片段中

if(theSame == 0) { 
     putSharedPrefs("pathToBt", g); 
} 

,如果你可以調試和檢查theSame0然後請把sysout看看是否打印出來。

既然你很確定如果沒有被執行,它似乎是你正在調試的代碼和正在執行的代碼不一樣的情況。這種情況有時會在eclipse中發生,當構建沒有部署時,並且您正在使用舊的可執行文件調試新源。

0

爲什麼不只是做:

if (s.equalsIgnoreCase(bt) { 
    return g; 
} 

我想你可以使用的compareTo但它其他的一些東西......

+0

請參閱我的編輯 –