Java String이 모든 공백 공간이 아님을 확인하려면 어떻게 해야 합니까?
Java String이나 문자 배열이 단순히 공백으로만 구성되어 있지 않은지 확인하고 싶습니다.
Javascript 이외에는입니다.
문자열에 공백뿐만 아니라 문자 및 공백이 포함되어 있는지 확인하려면 어떻게 해야 합니까?
편집: 영숫자에 대한 비트를 삭제했기 때문에 의미가 있습니다.
생각할 수 있는 최단 솔루션:
if (string.trim().length() > 0) ...
공백만 확인합니다.클래스를 한 문자 클래스를 .match()리젝스트하다
if (string.matches(".*\\w.*")) ...
...하나 이상의 (ASCII) 영숫자를 확인합니다.
Apache Commons Lang 라이브러리를 사용합니다.StringUtils라는 클래스가 있으며 모든 종류의 String 조작에 도움이 됩니다.문자열이 모든 공백 공간이 아닌지 확인하려면 다음을 사용할 수 있습니다.
StringUtils.isBlank(<your string>)
다음은 참고 자료입니다.StringUtils.isBlank
Carl Smotricz가 언급한 것보다 약간 짧습니다.
!string.trim().isEmpty();
StringUtils.isBlank(CharSequence)
Java 11 또는 그 이상을 사용하고 있는 경우,isBlank합니다.string 서서메 string string string 。
!s.isBlank();
Java 8, 9 또는 10을 사용하는 경우 문자열이 공백만 아닌지 확인하는 간단한 스트림을 작성할 수 있습니다.
!s.chars().allMatch(Character::isWhitespace));
Commons Lang 등의 로 하지 만 아니라 일반 Apache Commons Lang뿐만 할 수 있는 .' '와 trim-기반의솔루션은다른많은답변에서제안되었습니다.지원되는 모든 공백 유형의 전체 목록은 Javadocs를 참조하십시오.빈 문자열은 두 경우 모두 해당됩니다.
이 답변은 "즉, 적어도1개의 영숫자가 있다"는 측면에 초점을 맞추고 있습니다.또한 String이 다른 (이전)솔루션에는 그다지 추가되지 않습니다.단, NPE에서는 String이 다음과 같이 되어도 문제가 되지 않습니다.null
false(1이 (1)인 경우null또는 (2)가 비어 있거나 (3)은 화이트차만 포함합니다.
public static boolean containsNonWhitespaceChar(String s) {
return !((s == null) || "".equals(s.trim()));
}
if(target.matches("\\S"))
// then string contains at least one non-whitespace character
백슬래시 cap-S(공백 이외의 문자)의 사용에 주의해 주십시오.
이것이 가장 간단한(아마도 가장 빠른) 솔루션이라고 장담합니다.
공백만 확인하고 null에 관심이 없는 경우 org.apache.commons.lang을 사용할 수 있습니다.String Utils.is Whitespace(String str),
StringUtils.isWhitespace(String str);
(String에 공백만 포함되어 있는지 확인합니다).
null(공백 포함)도 체크할 경우
StringUtils.isBlank(String str);
openjdk 13, Windows 10에서의 퍼포먼스 비교입니다.각 텍스트에 대해:
"abcd"
" "
" \r\n\t"
" ab "
" \n\n\r\t \n\r\t\t\t \r\n\r\n\r\t \t\t\t\r\n\n"
"lorem ipsum dolor sit amet consectetur adipisici elit"
"1234657891234567891324569871234567891326987132654798"
다음 테스트 중 하나를 실행하였습니다.
// trim + empty
input.trim().isEmpty()
// simple match
input.matches("\\S")
// match with precompiled pattern
final Pattern PATTERN = Pattern.compile("\\S");
PATTERN.matcher(input).matches()
// java 11's isBlank
input.isBlank()
각 10,000.000회.
결과:
METHOD min max note
trim: 18 313 much slower if text not trimmed
match: 1799 2010
pattern: 571 662
isBlank: 60 338 faster the earlier hits the first non-whitespace character
의외로 트림+empty가 가장 빠릅니다.잘린 텍스트를 구성해야 하는 경우에도 마찬가지입니다.더 빠르고 단순한 for-loop을 통해 단일 비휘도 문자를 찾을 수 있습니다.
편집: 텍스트가 길수록 숫자가 다릅니다.긴 텍스트의 트리밍은 단순한 루프보다 시간이 오래 걸립니다.그러나 정규식은 여전히 가장 느린 해결책입니다.
Java-11+에서는 API를 사용하여 지정된 문자열이 모두 공백으로 구성되어 있지 않은지 확인할 수 있습니다.
String str1 = " ";
System.out.println(str1.isBlank()); // made up of all whitespaces, prints true
String str2 = " a";
System.out.println(str2.isBlank()); // prints false
동일한 javadoc은 다음과 같습니다.
/**
* Returns {@code true} if the string is empty or contains only
* {@link Character#isWhitespace(int) white space} codepoints,
* otherwise {@code false}.
*
* @return {@code true} if the string is empty or contains only
* {@link Character#isWhitespace(int) white space} codepoints,
* otherwise {@code false}
*
* @since 11
*/
public boolean isBlank()
트리밍 방법이 효과적일 것입니다.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim()
선행 및 후행 공백을 생략하고 문자열 복사본을 반환합니다.이 String 객체가 빈 문자 시퀀스를 나타내거나 이 String 객체가 나타내는 문자 시퀀스의 처음과 마지막 문자가 모두 '\u0020'(스페이스 문자)보다 큰 코드를 가지고 있는 경우 이 String 객체에 대한 참조가 반환됩니다.
그렇지 않으면 문자열에 "\u0020"보다 큰 코드를 가진 문자가 없으면 빈 문자열을 나타내는 새로운 문자열 개체가 생성되어 반환됩니다.
그 이외의 경우 k는 코드가 '\u0020'보다 큰 문자열의 첫 번째 문자의 인덱스로 하고 m은 코드가 '\u0020'보다 큰 문자열의 마지막 문자의 인덱스로 합니다.새로운 String 객체가 생성됩니다.이 객체는 인덱스 k의 문자로 시작하여 인덱스 m의 문자로 끝나는 이 문자열의 서브스트링(k, m+1)의 결과입니다.
이 메서드는 문자열의 처음과 끝에서 공백을 자르기 위해 사용할 수 있습니다.실제로 모든 ASCII 제어 문자도 자릅니다.
반품:선행 및 후행 공백이 제거된 이 문자열의 복사본. 선행 또는 후행 공백이 없는 경우 이 문자열. 선행 또는 후행 공백이 없습니다.
잘라낸 다음 빈 문자열과 비교하거나 길이가 0인지 확인할 수 있습니다.
다른 방법:
boolean isWhiteSpaces( String s ) {
return s != null && s.matches("\\s+");
}
trim() 및 기타 언급된 정규 표현은 모든 유형의 공백에서 작동하지 않습니다.
예: Unicode 문자 'LINE SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm
Java 함수는 Character.is Whitespace()로 모든 상황을 커버합니다.
따라서 이미 설명한 솔루션 StringUtils.isWhitespace(String ) /또는 StringUtils.isBlank(String)를 사용해야 합니다.
StringUtils.isEmptyOrWhitespaceOnly(<your string>)
확인 : - null - 공간만 - 빈 문자열 " "
개인적으로는 제가 더 좋아하는 건!str.isBlank()다른 사람들이 이미 제안했듯이(또는str -> !str.isBlank()술어로서) 보다 현대적이고 효율적인 버전의str.trim()위에서 언급한 접근방식은 다음과 같습니다.str.strip()- null을 "공백"으로 간주:
if (str != null && str.strip().length() > 0) {...}
예를 들어 단위 테스트에서 스트림과 함께 사용할 경우 Predicate로 지정합니다.
@Test
public void anyNonEmptyStrippedTest() {
String[] strings = null;
Predicate<String> isNonEmptyStripped = str -> str != null && str.strip().length() > 0;
assertTrue(Optional.ofNullable(strings).map(arr -> Stream.of(arr).noneMatch(isNonEmptyStripped)).orElse(true));
strings = new String[] { null, "", " ", "\\n", "\\t", "\\r" };
assertTrue(Optional.ofNullable(strings).map(arr -> Stream.of(arr).anyMatch(isNonEmptyStripped)).orElse(true));
strings = new String[] { null, "", " ", "\\n", "\\t", "\\r", "test" };
}
public static boolean isStringBlank(final CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(cs.charAt(i))) {
return false;
}
}
return true;
}
언급URL : https://stackoverflow.com/questions/3247067/how-do-i-check-that-a-java-string-is-not-all-whitespaces
'programing' 카테고리의 다른 글
| Java에서의 GPGPU/CUDA/OpenCL에 대한 최선의 접근법 (0) | 2022.11.24 |
|---|---|
| MySQL 임시 테이블 vs where in 절 (0) | 2022.11.24 |
| Python db-api: fetchone vs fetchmany vs fetchall (0) | 2022.11.24 |
| 싱글톤의 대체 수단 (0) | 2022.11.23 |
| JavaScript의 'new' 키워드는 무엇입니까? (0) | 2022.11.23 |