[java] 문자가 빈 공간과 같은지 확인하는 방법은 무엇입니까?

내가 가진 것은 다음과 같습니다.

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

그러나 해당 코드는 해당 메서드에 대한 Symbol을 찾을 수 없다고 말합니다. 나는 자바가 이와 같은 비교자를 가지고있는 것을 기억한다. 어떤 제안이라도?



답변

if (c == ' ')

char는 원시 데이터 유형이므로 ==.

또한 큰 따옴표를 사용하여 String상수 ( " ") 를 만들고 작은 따옴표를 사용 하면 char상수 ( ' ')입니다.


답변

필요한 코드는 “빈 공간”이 의미하는 바에 따라 다릅니다.

  • ASCII / Latin-1 / 유니 코드 공백 문자 (0x20) 일명 SP를 의미하는 경우 :

    if (ch == ' ') {
        // ...
    }
    
  • 기존 ASCII 공백 문자 (SP, HT, VT, CR, NL)를 의미하는 경우 :

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • 유니 코드 공백 문자를 의미하는 경우 :

    if (Character.isWhitespace(ch)) {
        // ...
    }
    

유니 코드 공백에는 추가 ASCII 제어 코드 상위 코드 플레인의 다른 유니 코드 문자가 포함됩니다. 에 대한 javadoc을 참조하십시오 Character.isWhitespace(char).


당신이 쓴 것은 다음과 같습니다.

    if (Equals(ch, " ")) {
        // ...
    }

이것은 여러 수준에서 잘못된 것입니다. 첫째, Java 컴파일러가이를 시그니처가있는 메서드에 대한 호출로 해석하려고 시도하는 방식입니다 boolean Equals(char, String).

  • 컴파일러가 오류 메시지에보고 한대로 메서드가 없기 때문에 잘못된 것입니다.
  • Equals어쨌든 일반적으로 메소드의 이름이 아닙니다. Java 규칙은 메소드 이름이 소문자로 시작한다는 것입니다.
  • 코드는 (서면으로) 문자와 문자열을 비교하려고하지만, 한 charString비교할 수 없습니다 공통 기본 형식으로 캐스팅 할 수 없습니다.

Java에는 Comparator와 같은 것이 있지만 메서드가 아닌 인터페이스이며 다음과 같이 선언됩니다.

    public interface Comparator<T> {
        public int compare(T v1, T v2);
    }

즉, 메서드 이름은 compare(아님 Equals)이고 정수 (부울 아님)를 반환하며 유형 매개 변수가 제공하는 유형으로 승격 될 수있는 두 값을 비교합니다.


누군가 (삭제 된 답변에서!)는 이것을 시도했다고 말했습니다.

    if (c == " ")

두 가지 이유로 실패합니다.

  • " "문자 리터럴이 아닌 문자열 리터럴이며 Java는 Stringchar값의 직접 비교를 허용하지 않습니다 .

  • 을 사용하여 문자열 또는 문자열 리터럴을 절대 비교해서는 안됩니다 ==. ==참조 유형 의 연산자는 개체 값이 아닌 개체 ID를 비교합니다. 이 경우 String다른 개체가 다른 ID와 동일한 값을 갖는 것이 일반적입니다. ==테스트는 것이다 종종 잘못된 대답을 여기에 뭘 하려는지의 관점에서 ….


답변

당신은 사용할 수 있습니다

Character.isWhitespace(c)

또는 Character 클래스에서 사용 가능한 다른 메서드 중 하나입니다.

  if (c == ' ')

또한 작동합니다.


답변

char은 기본 유형 이므로 c == ' '.
당신은 호출 할 필요가 equals()동일한 참조 유형 StringCharacter.


답변

내 제안은 다음과 같습니다.

if (c == ' ')


답변

문자를 비교하려면 ==연산자 를 사용하십시오 .

if (c == ' ')


답변

Character.isSpaceChar(c) || Character.isWhitespace(c) 나를 위해 일했습니다.