2013-04-22 13 views
28

jestem w stanie porównać dwa ciągi stosując następujący kod:porównanie String - Android

Mam ciąg nazwie „gender”, która będzie miała „męskie” i „żeńskie” jako jego wartości.

if(gender == "Male") 
    salutation ="Mr."; 
if(gender == "Female") 
    salutation ="Ms."; 

ten nie działa, więc próbowałem następujące:

String g1="Male"; 
String g2="Female"; 
if(gender.equals(g1)) 
    salutation ="Mr."; 
if(gender.equals(g2)) 
    salutation ="Ms."; 

Ponownie, to nie działa. Czy ktoś może mi powiedzieć, jak porównać wartości ciągu za pomocą instrukcji if.

+1

Czy otrzymujesz rozwiązanie z odpowiedzi? –

+3

możliwy duplikat [Jak porównać ciągi znaków w Javie?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Blackbelt

+5

Możliwy duplikat [Jak porównać stringów w Javie?] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – SilentKiller

Odpowiedz

72

Spróbuj

if(gender.equals("Male")) 
salutation ="Mr."; 
if(gender.equals("Female")) 
salutation ="Ms."; 

także usunąć ; (semi-dwukropek) w swojej if

if(gender.equals(g1)); 

W Javie, jeden z najczęstszych błędów przybysze spełniających używa == do porównywania ciągów znaków . Musisz pamiętać, == porównuje referencje obiektów, a nie treść.

+3

Jeśli wyjaśnisz, dlaczego, będę +1 to :) –

+0

Spójrz na swoje koduj ostrożnie i usuń; na końcu obu instrukcji if. –

+0

Niestety, nie używałem; po tym, jak stmt w moim rzeczywistym kodzie, błąd podczas wpisywania pytania tutaj! –

3

spróbować

String g1="Male"; 
    String g2="Female"; 
    if(gender.equals(g1)) 
     salutation ="Mr."; 
    if(gender.equals(g2)) 
     salutation ="Ms."; 

ty kończąc swój if if(gender.equals(g1)); < < --- tutaj dodając ";"

8

W Javie nie porównać ciąg jak robisz powyżej ... Oto porównanie String ...

if (gender.equalsIgnoreCase("Male")) { 
     salutation = "Mr."; 
    } else if (gender.equalsIgnoreCase("Female")) { 
     salutation = "Ms."; 
    } 
0
if(gender.equals(g1)); <--- 
if(gender == "Female"); <--- 

Masz średnik po if.REMOVE IT.

2

To powinno działać:

if(gender.equals("Male")){ 
salutation ="Mr."; 
} 
else if(gender.equals("Female")){ 
salutation ="Ms."; 
} 

Pamiętaj, aby nie używać ; po if oświadczeniu.

4

Twój gender == "Male" faktycznie porównując odwołań do obiektów dla obiektu gender i innego obiektu Male. Trzeba użyć metody .equals(), aby porównać wartość obiektów.

3
String g1="Male"; 
String g2="Female"; 
String salutation=""; 
String gender="Male"; 
if(gender.toLowerCase().trim().equals(g1.toLowerCase().trim())); 
    salutation ="Mr."; 
if(gender.toLowerCase().trim().equals(g2.toLowerCase().trim())); 
    salutation ="Ms."; 
3

Spróbuj tego.

 String g1 = "Male"; 
     String g2 = "Female"; 
     String gender = "Male"; 
     String salutation = ""; 
     if (gender.equalsIgnoreCase(g1)) 

      salutation = "Mr."; 
     else if (gender.equalsIgnoreCase(g2)) 

      salutation = "Ms."; 
     System.out.println("Welcome " + salutation); 

wyjściowa:

Welcome Mr. 
6

Myślę, że powyższe rozwiązanie jest correct.Because == sprawdza czy dwa ciągi są takie same, a przecież.equals() sprawdza, czy dwa łańcuchy mają tę samą wartość.

+0

To jest lepsze wytłumaczenie dlaczego nie używać == – Dexter

+1

nie ma żadnej "powyższej" odpowiedzi, ponieważ kolejność zależy od numeru głosów. edytuj i określ, jeśli to możliwe. tks –

0

Właściwie każdy kod działa tutaj, ale problem prawdopodobnie pochodzi od zmiennej gender. Czy przed porównaniem próbowałeś wykonać prosty System.out.println(gender);?

12

Łańcuch w odróżnieniu od int lub innych zmiennych numerycznych jest porównywany w Javie inaczej niż w innych językach.

Aby porównać ciągi znaków w Javie (android), stosuje się metodę .compareTo();

więc kod powinien wyglądać następująco:

if(gender.compareTo("Male")==0){ 
    salutation ="Mr."; 
} 
if(gender.compareTo("Female")==0){ 
    salutation ="Ms."; 
} 
-1

Spróbuj:

if (Objects.equals(gender, "Male")) { 
    salutation ="Mr."; 
} else if (Objects.equals(gender, "Female")) { 
    salutation ="Ms."; 
} 
0

Można użyć, contentEquals function(). To może pomóc ..