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


104

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

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

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


2
빈 공간 - ' '내용이 없습니까?
Andreas Dolk 2010

답변:


213
if (c == ' ')

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

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


87

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

  • 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와 동일한 값을 갖는 것이 일반적입니다. ==테스트는 것이다 종종 잘못된 대답을 여기에 뭘 하려는지의 관점에서 ....


20

당신은 사용할 수 있습니다

Character.isWhitespace(c)

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

  if (c == ' ')

또한 작동합니다.


글쎄, 그것은 궁극적으로 그가 공백만을 확인하는지 여부에 달려 있습니다. 탭이 포함되어 있으면 오 탐지가 발생할 것입니다.

업데이트되었습니다. 그는 과잉이지만 캐릭터에서 직접 필요한 것을 할 수 있습니다.
Corv1nus 2010

18

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




5

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


4

이 경우 String 비교 함수를 생각하고 있습니다 "String".equals("some_text"). 문자는이 기능을 사용할 필요가 없습니다. 대신 표준 ==비교 연산자로 충분합니다.

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (c == ' ') // your resulting outcome
    }
}

3

언뜻보기에 코드가 컴파일되지 않습니다. 중첩 된 if 문에는 중괄호가 없으므로 다음 줄을 실행해야하는 코드로 간주합니다. 또한 문자열 ""에 대해 문자를 비교하고 있습니다. 대신 문자로 값을 비교해보십시오. 올바른 구문은 다음과 같습니다.

if(c == ' '){
   //do something here
}

하지만 다시 저는 "Equal"수업에 익숙하지 않습니다


3

당신은 시도 할 수 있습니다:

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

또는:

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

-5

비교하려면 equals 키워드 Strings를 사용해야합니다 .

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

1)이 질문은 문자열이 아닌 문자를 비교하는 것입니다. 2) equalsJava 에는 키워드 가 없습니다 . 식별자입니다. 3) cchar(기본 유형 !!)이므로을 호출 할 수 없습니다 c.equals(...). 4) 가능하더라도 char에 매핑되는 값 은 없습니다 "". 후자는 "문자가없는"문자열을 의미합니다. 캐릭터와 일치 할 수 없습니다.
Stephen C

이 질문에 답하는 열쇠는 문맥 상 어떤 의미를 갖는 "빈 공간"에 대한 의미를 내놓는 것입니다.
Stephen C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.