2017-03-02 134 views
1

下面是我的代碼,它檢查傳入的模型並相應地修改源,檢查它的ALLCAPS或Firstcap。我遇到的問題是模型包含一個符號,例如matchCase( 「我」, 「蘋果」)。這將返回蘋果,當它應該返回蘋果。另一方面,如果我使用「Im」,它將正確地修改爲「Apple」。有沒有辦法我可以修改它的工作。我試圖運行的幾種方法,但我一直陷入字符串循環問題

public static String matchCase(String model, String source){ 
 
    boolean o = true; 
 
    if(model.toUpperCase().equals(model)){ 
 
     source = source.toUpperCase(); 
 
    } 
 
    if(Character.isUpperCase(model.charAt(0))){ 
 
     for(int i=1;i<model.length();i++){ 
 
     if(Character.isLowerCase(model.charAt(i)) == false){ 
 
      o = false; 
 
     } 
 
     } 
 
    // if(o == model.length()-1){ 
 
     if(o == true){ 
 
     String can = ""; 
 
     for(int j=0;j<source.length();j++){ 
 
      if(j==0){ 
 
      can += Character.toUpperCase(source.charAt(j)); } 
 
      else{ 
 
      can += source.charAt(j); 
 
      } 
 
     } 
 
     source = can; 
 
// Character.toUpperCase(source.charAt(0)); 
 
     
 
    } 
 
    } 
 
    
 
    return source; 
 
    } 
 
}

+0

能否請你解釋更加清晰的方式邏輯?你到底想要達到什麼目標? –

+0

*這將返回蘋果,當它應該返回蘋果。另一方面,如果我使用「Im」,它將正確地修改爲「Apple」。*這聽起來很不錯。有什麼問題? – nullpointer

+0

它以字符串作爲模型,其中一個來源。比方說模型是「檢查」,來源是「你好」。它將檢查模型並將源修改爲HELLO,因爲模型全部大寫。同樣,如果它的模型是「Check」並且源代碼是「hello」,它會將源代碼修改爲「Hello」。 –

回答

1

我認爲你的問題來自於一個事實,即

Character.isLowerCase('\'') // is false 

你應該改變這種測試

if(Character.isLowerCase(model.charAt(i)) == false) 

通過

if(Character.isUpperCase(model.charAt(i))) 
+0

爲了說明,請查看:https://www.tutorialspoint.com/java/character_islowercase.htm – DVT

+0

謝謝,這是做到了。 :) –

+0

@BasilSindhu如果您認爲它是正確的,請接受答案。 – DVT

0

如果你知道你的模型總是要大寫或firstcap你不能做這樣的事情:

public static String matchCase(String model, String source){ 
    if(model.toUpperCase() == model) 
     return source.toUpperCase(); 
     // capitalize the first letter of source and send back 
    return Character.toUpperCase(source.charAt(0)) + source.substring(1); 
    }