내가 가진 것은 다음과 같습니다.
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 규칙은 메소드 이름이 소문자로 시작한다는 것입니다.- 코드는 (서면으로) 문자와 문자열을 비교하려고하지만, 한
char
과String
비교할 수 없습니다 공통 기본 형식으로 캐스팅 할 수 없습니다.
Java에는 Comparator와 같은 것이 있지만 메서드가 아닌 인터페이스이며 다음과 같이 선언됩니다.
public interface Comparator<T> {
public int compare(T v1, T v2);
}
즉, 메서드 이름은 compare
(아님 Equals
)이고 정수 (부울 아님)를 반환하며 유형 매개 변수가 제공하는 유형으로 승격 될 수있는 두 값을 비교합니다.
누군가 (삭제 된 답변에서!)는 이것을 시도했다고 말했습니다.
if (c == " ")
두 가지 이유로 실패합니다.
-
" "
문자 리터럴이 아닌 문자열 리터럴이며 Java는String
및char
값의 직접 비교를 허용하지 않습니다 . -
을 사용하여 문자열 또는 문자열 리터럴을 절대 비교해서는 안됩니다
==
.==
참조 유형 의 연산자는 개체 값이 아닌 개체 ID를 비교합니다. 이 경우String
다른 개체가 다른 ID와 동일한 값을 갖는 것이 일반적입니다.==
테스트는 것이다 종종 잘못된 대답을 여기에 뭘 하려는지의 관점에서 ….
답변
당신은 사용할 수 있습니다
Character.isWhitespace(c)
또는 Character 클래스에서 사용 가능한 다른 메서드 중 하나입니다.
if (c == ' ')
또한 작동합니다.
답변
char
은 기본 유형 이므로 c == ' '
.
당신은 호출 할 필요가 equals()
동일한 참조 유형 String
나 Character
.
답변
내 제안은 다음과 같습니다.
if (c == ' ')
답변
문자를 비교하려면 ==
연산자 를 사용하십시오 .
if (c == ' ')
답변
Character.isSpaceChar(c) || Character.isWhitespace(c)
나를 위해 일했습니다.
