Làm thế nào để kiểm tra xem một char có bằng một không gian trống không?


104

Đây là những gì tôi có:

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (Equals(c," "))
    }
}

Nhưng mã đó cho biết nó không thể tìm thấy Biểu tượng cho phương thức đó. Tôi nhớ Java có một trình so sánh như thế này ... Bất kỳ đề xuất nào?


2
không gian trống - a ' 'không có nội dung?
Andreas Dolk

Câu trả lời:


213
if (c == ' ')

charlà 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 Stringhằng số ( " "), trong khi với dấu ngoặc kép thì đó là charhằng số ( ' ').


87

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 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).

  • Điều này sai vì không có phương pháp nào tồn tại, như trình biên dịch đã báo cáo trong thông báo lỗi.
  • Equalsthườ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.
  • Mã của bạn (như văn bản) đã cố gắng để so sánh một nhân vật và một String, nhưng charStringkhô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ị Stringchar.

  • 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 Stringnó 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.


20

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.


Cuối cùng thì điều đó phụ thuộc vào việc liệu anh ta có chỉ kiểm tra dấu cách hay không. Ý tôi là nếu nó chứa một tab, bạn sẽ nhận được một kết quả dương tính giả.

Đã cập nhật. Anh ta có thể làm những gì anh ta cần trực tiếp từ Nhân vật, mặc dù nó là quá mức cần thiết.
Corv1nus

18

charlà kiểu nguyên thủy nên bạn chỉ có thể viết c == ' '.
Bạn chỉ cần gọi equals()để tham khảo các loại như Stringhoặc Character.



11

Để so sánh ký tự, bạn sử dụng ==toán tử:

if (c == ' ')

5

Character.isSpaceChar(c) || Character.isWhitespace(c) đã làm cho tôi.


4

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
    }
}

3

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


3

Bạn co thể thử:

if(Character.isSpaceChar(ch))
{
    // Do something...
}

Hoặc là:

if((int) ch) == 32)
{
    // Do something...
}

-5

Để so sánh, Stringsbạn phải sử dụng từ khóa bằng .

if(c.equals(""))
{
}

1) Câu hỏi này là về so sánh các ký tự, không phải chuỗi. 2) Không có equalstừ khóa nào trong Java. Nó là một định danh. 3) Vì cchar(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ó chargiá 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.
Stephen C

Chìa khóa để trả lời Câu hỏi này là tìm ra một nghĩa cho "không gian trống" có nghĩa nào đó trong ngữ cảnh.
Stephen C
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.