2012-02-04 40 views
9

Làm cách nào để so sánh hai ký tự của hai số CharSequence?Cách so sánh các ký tự trong hai CharSequences

Đây là hai CharSequence tôi s:

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

Nếu tôi cố gắng để so sánh như thế này:

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

..it mang lại cho tôi lỗi.

Trả lời

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

Để so sánh particul ar char s trong Chuỗi của bạn, bạn có thể sử dụng phương thức char charAt(int) cũng từ loại String. Dưới đây là ví dụ sử dụng:

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

Bạn phải nhớ rằng char charAt(int) là zero-based nên 0 là lần đầu tiên, 1 là thứ hai và vân vân. Và trong ví dụ này, bạn có thể thấy rằng tôi đã so sánh hai ký tự giống như tôi so sánh các ví dụ int - với đơn giản ==.

So sánh toàn bộ String s:

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

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

Để làm cho nó phân biệt dạng chữ bạn có thể sử dụng phương pháp từ String loại toLowerCase() trên cả String s.

name1.equalsIgnoreCase(name2); 

hay:

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

charAt() được định nghĩa trong CharSequence và sẽ ít hiệu quả hơn để chuyển đổi chúng thành chuỗi đầu tiên - có lẽ thậm chí không thể (không có ràng buộc trên CharSequence để gợi ý rằng tất cả các ký tự trong nó cần phải có khả năng phù hợp với bộ nhớ) – Jules

+0

Tôi trả lời thứ hai @Jules.Nếu bạn đang so sánh CharSequences, bạn nên thực hiện điều gì đó dọc theo dòng java.util.Arrays.equals (char [], ch ar []) và giữ chúng như CharSequences và sử dụng charAt nơi bạn thấy truy cập mảng. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Arrays.java#Arrays.equals%28char%5B%5D%2Cchar%5B% 5%% 29 – LINEMAN78

5

Nếu có thể so sánh hai Strings,

Thay vì ChracterSequence so sánh một cái gì đó như thế nào,

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

Một CharSequence là một chuỗi có thể đọc được các ký tự. Giao diện này cung cấp truy cập đồng bộ, chỉ đọc cho nhiều loại chuỗi ký tự khác nhau. Vì vậy, nếu bạn có để so sánh hai bạn phải đi qua mỗi nhân vật của những chuỗi bằng cách sử dụng vòng lặp, do đó, tốt hơn của nó để thay đổi nó trong chuỗi sau đó so sánh nó. – user370305

+0

Tôi làm cách nào? –

+0

nghĩa là gì? – user370305

4

Hãy thử điều này:

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

Tôi không sử dụng chuỗi và bạn cũng không thể chuyển CharSequence thành chuỗi. Làm thế nào để tôi cắm trại CharSequence. Và tôi cũng so sánh các nhân vật không phải toàn bộ chuỗi. –

+0

CharSequence là một giao diện, không phải là một lớp cụ thể. Bạn có thể không thực sự tạo ra một thể hiện của một CharSequence. Xem tài liệu ở đây http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/CharSequence.html bạn cần một Chuỗi (bạn có thể truy cập như một mảng nếu bạn không muốn sử dụng phương thức equals tích hợp, hoặc StringBuffer, bởi vì đó là thực thi cụ thể của CharSequence –

+0

Nó hoạt động nhưng tôi không thể so sánh các ký tự cụ thể ... –

1
name1.toString.contentEquals(name2); 
6

Sử dụng CharSequence.html#charAt(int) để có được những char tại một vị trí xác định. Sau đó bạn có thể so sánh với char==

Về mã của bạn trong câu hỏi, điều này sẽ dẫn đến

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