2012-02-04 14 views
9

Come devo confrontare due caratteri di due CharSequence s?Come confrontare i caratteri in due CharSequences

queste sono le mie due CharSequence s:

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

Se provo a confrontare in questo modo:

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

..è mi dà errori.

risposta

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

Per confrontare particul ar char s nella stringa, è possibile utilizzare il metodo char charAt(int) anche dal tipo String. Ecco ad esempio l'uso:

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

Bisogna ricordare che char charAt(int) è a base zero in modo da 0 è il primo, 1 è secondo e così via. E in questo esempio puoi vedere che ho confrontato due caratteri, proprio come farei per confrontare gli eguer int, con il semplice ==.

Confrontando intere String s:

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

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

per renderlo case insensitive è possibile utilizzare il metodo da String tipo toLowerCase() su entrambi i String s.

name1.equalsIgnoreCase(name2); 

o:

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

charAt() è definito in CharSequence e sarebbe meno efficiente convertirli prima in Stringhe - forse non è nemmeno possibile (non esiste alcun vincolo su CharSequence per suggerire che tutti i caratteri in esso contenuti devono essere in grado di adattarsi alla memoria) – Jules

+0

I seconda risposta @Jules Se si intende confrontare CharSequences, è necessario implementare qualcosa sulla falsariga di java.util.Arrays.equals (char [], ch ar []) e conservali come CharSequences e usa charAt dove vedi l'accesso alla matrice. 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

Se possibile confrontare due Strings,

Invece di ChracterSequence confronto qualcosa di simile,

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

Un CharSequence è una sequenza di caratteri leggibili. Questa interfaccia fornisce un accesso uniforme e di sola lettura a molti diversi tipi di sequenze di caratteri. Quindi, se devi confrontare questi due devi passare attraverso ogni carattere di quelle sequenze usando il ciclo, quindi è meglio cambiarlo in stringa e confrontarlo. – user370305

+0

come faccio? –

+0

cosa significa? – user370305

4

Prova questo:

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

Non sto usando le stringhe né puoi passare CharSequence a una stringa. Come posso campare CharSequence. E sto anche confrontando i caratteri non con Sequenza intera. –

+0

CharSequence è un'interfaccia, non una classe concreta. Non è possibile creare un'istanza di CharSequence. Vedi documentazione qui http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/CharSequence.html hai bisogno di una stringa (che puoi accedere come una matrice se non vuoi usare il metodo built-in equals, o un StringBuffer, perché quelle sono effettive implementazioni concrete di CharSequence –

+0

Funziona ma non riesco a confrontare particolari caratteri ... –

1
name1.toString.contentEquals(name2); 
6

Usa CharSequence.html#charAt(int) per ottenere il char in una posizione specificata. È quindi possibile confrontare char con ==

Per quanto riguarda il codice in questione, questo si tradurrà in

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