Câu trả lời:
if (c == ' ')
char
là một kiểu dữ liệu nguyên thủy, vì vậy nó có thể được so sánh với ==
.
Ngoài ra, bằng cách sử dụng dấu ngoặc kép, bạn tạo String
hằng số ( " "
), trong khi với dấu ngoặc kép thì đó là char
hằng số ( ' '
).
Mã bạn cần tùy thuộc vào ý bạn muốn nói đến "khoảng trống".
Nếu ý của bạn là ký tự khoảng trắng ASCII / Latin-1 / Unicode (0x20) hay còn gọi là SP, thì:
if (ch == ' ') {
// ...
}
Nếu ý của bạn là bất kỳ ký tự khoảng trắng ASCII truyền thống nào (SP, HT, VT, CR, NL), thì:
if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
// ...
}
Nếu ý của bạn là bất kỳ ký tự khoảng trắng Unicode nào, thì:
if (Character.isWhitespace(ch)) {
// ...
}
Lưu ý rằng có khoảng trắng Unicode bao gồm các mã điều khiển ASCII bổ sung và một số ký tự Unicode khác trong các mặt phẳng mã cao hơn; xem javadoc cho Character.isWhitespace(char)
.
Những gì bạn đã viết là thế này:
if (Equals(ch, " ")) {
// ...
}
Điều này là sai ở một số cấp độ. Thứ nhất, cách mà trình biên dịch Java cố gắng giải thích đó là một lời gọi đến một phương thức có chữ ký của boolean Equals(char, String)
.
Equals
thường sẽ không phải là tên của một phương thức. Quy ước Java là các tên phương thức bắt đầu bằng một chữ cái thường.char
và String
không thể so sánh và không thể được đúc để một loại cơ sở chung.Có một thứ như là một Bộ so sánh trong Java, nhưng nó là một giao diện không phải là một phương thức và nó được khai báo như thế này:
public interface Comparator<T> {
public int compare(T v1, T v2);
}
Nói cách khác, tên phương thức là compare
(not Equals
), nó trả về một số nguyên (không phải boolean) và nó so sánh hai giá trị có thể được thăng cấp thành kiểu được cung cấp bởi tham số kiểu.
Ai đó (trong Câu trả lời đã bị xóa!) Cho biết họ đã thử điều này:
if (c == " ")
Điều đó không thành công vì hai lý do:
" "
là một chuỗi ký tự chứ không phải một ký tự ký tự và Java không cho phép so sánh trực tiếp các giá trị String
và char
.
Bạn KHÔNG BAO GIỜ nên so sánh chuỗi hoặc chuỗi ký tự bằng cách sử dụng ==
. Các ==
nhà điều hành trên một loại tài liệu tham khảo so sánh nhận dạng đối tượng, chứ không phải giá trị đối tượng. Trong trường hợp của String
nó là phổ biến để có các đối tượng khác nhau với danh tính khác nhau và cùng giá trị. Một ==
bài kiểm tra thường sẽ đưa ra câu trả lời sai ... từ quan điểm của những gì bạn đang cố gắng làm ở đây.
Bạn đã có thể sử dụng
Character.isWhitespace(c)
hoặc bất kỳ phương thức khả dụng nào khác trong lớp Character.
if (c == ' ')
cũng hoạt động.
Đề xuất của tôi sẽ là:
if (c == ' ')
Trong trường hợp này, bạn đang nghĩ đến hàm so sánh chuỗi "String".equals("some_text")
. Các ký tự không cần sử dụng chức năng này. Thay vào đó, một ==
toán tử so sánh tiêu chuẩn sẽ đủ.
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (c == ' ') // your resulting outcome
}
}
Thoạt nhìn, mã của bạn sẽ không biên dịch. Vì câu lệnh if lồng nhau không có bất kỳ dấu ngoặc nhọn nào, nó sẽ coi dòng tiếp theo là mã mà nó sẽ thực thi. Ngoài ra, bạn đang so sánh một ký tự với một Chuỗi, "". Thay vào đó, hãy thử so sánh các giá trị dưới dạng ký tự. Tôi nghĩ rằng cú pháp đúng sẽ là:
if(c == ' '){
//do something here
}
Nhưng sau đó, tôi không quen với "Equal"
lớp học
Bạn co thể thử:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Hoặc là:
if((int) ch) == 32)
{
// Do something...
}
Để so sánh, Strings
bạn phải sử dụng từ khóa bằng .
if(c.equals(""))
{
}
equals
từ khóa nào trong Java. Nó là một định danh. 3) Vì c
là char
(kiểu nguyên thủy !!), bạn không thể gọi c.equals(...)
. 4) Ngay cả khi bạn có thể, không có char
giá trị nào ánh xạ đến ""
. Sau đó có nghĩa là một Chuỗi với "không có ký tự nào trong đó". Điều đó không thể phù hợp với một nhân vật.
' '
không có nội dung?