2012-02-04 17 views
9

Jak porównać dwie postacie dwóch sond CharSequence?Jak porównać znaki w dwóch CharSequences

Są to moi dwaj CharSequence s:

CharSequence name1 = fname.getText(); 
CharSequence name2 = sname.getText(); 

Gdy próbuję porównać tak:

if(name1[i] == name2[j]) 

..To daje mi błędy.

Odpowiedz

4
String name1 = editText1.getText().toString(); 
String name2 = editText2.getText().toString(); 

Aby porównać particul ar char s w swoim łańcuchu, możesz użyć metody char charAt(int) również z typu String. Oto przykład użycia:

if(name1.charAt(2) == name2.charAt(0)){ 
    // Do your stuff 
} 

Trzeba pamiętać, że char charAt(int) jest od zera, więc 0 jest pierwszym, 1 sekundy i tak dalej. I w tym przykładzie widać, że porównałem dwa znaki, tak jakbym porównał je z - z prostym ==.

Porównywanie całych String s:

// This returns true if Strings are equal: 
name1.contentEquals(name2);  

// This returns 0 if Strings are equal: 
name1.compareTo(name2); 

aby to sprawa niewrażliwe można użyć metody z String typu toLowerCase() obu String s.

name1.equalsIgnoreCase(name2); 

czyli

name1.toLowerCase().contentEquals(name2.toLowerCase()); 
+2

charAt() jest zdefiniowany w CharSequence, a byłoby mniej wydajne przekonwertowanie ich na Strings najpierw - być może nawet niemożliwe (nie ma ograniczeń na CharSequence, aby zasugerować, że wszystkie postacie muszą być w stanie zmieścić się w pamięci) – Jules

+0

I sekundę odpowiedzi @ Jules.Jeśli masz zamiar porównać CharSequences powinieneś zaimplementować coś wzdłuż linii java.util.Arrays.equals (char [], ch ar []) i zachowuj je jako CharSequences i użyj charAt, gdy zobaczysz dostęp do tablicy. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Arrays.java#Arrays.equals%28char%5B%5D%2Cchar%5B% 5D% 29 – LINEMAN78

5

Jeśli to możliwe porównanie dwóch Strings,

Zamiast ChracterSequence porównania coś podobnego,

String name1 = edtTextName1.getText().toString().trim(); 
String name2 = edtTextName2.getText().toString().trim(); 

if(name1.equals(name2)) 
{ 
Log.i("Result","True"); 
} 
else 
{ 
Log.i("Result","false"); 
} 
+0

A CharSequence jest czytelny ciąg znaków. Ten interfejs zapewnia jednolity, dostępny tylko do odczytu dostęp do wielu różnych rodzajów sekwencji znaków. Więc jeśli musisz porównać te dwie, musisz przejść przez każdy znak tej sekwencji używając pętli, więc lepiej jest go zmienić w ciągu, a następnie porównać. – user370305

+0

jak to zrobić? –

+0

co to oznacza? – user370305

4

Spróbuj tego:

String name1 = fname.getText().toString(); 
String name2 = sname.getText().toString(); 
if(name1.equals(name2)){/* do something */} 
+0

Nie używam ciągi znaków lub można przekazać CharSequence do ciąg znaków. Jak mogę kampania CharSequence. A także ja porównując znaki nie całe sekwencje. –

+0

CharSequence to interfejs, a nie konkretna klasa. W rzeczywistości nie można utworzyć wystąpienia obiektu CharSequence. Zobacz dokumentację tutaj http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/CharSequence.html potrzebujesz String (który możesz uzyskać dostęp do tablicy, jeśli nie chcesz używać wbudowana metoda equals lub StringBuffer, ponieważ są to rzeczywiste implementacje betonu CharSequence –

+0

Działa, ale nie mogę porównywać poszczególnych znaków ... –

1
name1.toString.contentEquals(name2); 
6

Zastosowanie CharSequence.html#charAt(int) uzyskać char w określonym położeniu. Następnie można porównać char z ==

Odnośnie kodu w pytaniu, będzie to skutkować

if(name1.charAt(i) == name2.charAt(j))