What is whitespace in Java?
A character is a Java whitespace character if and only if it satisfies one of the following criteria:
a. It is a Unicode space character (SPACE_SEPARATOR, LINE_SEPARATOR, or PARAGRAPH_SEPARATOR) but is not also a non-breaking space ('\u00A0', '\u2007', '\u202F').
b. It is '\t', U+0009 HORIZONTAL TABULATION.
c. It is '\n', U+000A LINE FEED.
d. It is '\u000B', U+000B VERTICAL TABULATION.
e. It is '\f', U+000C FORM FEED.
f. It is '\r', U+000D CARRIAGE RETURN.
g. It is '\u001C', U+001C FILE SEPARATOR.
h. It is '\u001D', U+001D GROUP SEPARATOR.
i. It is '\u001E', U+001E RECORD SEPARATOR.
j. It is '\u001F', U+001F UNIT SEPARATOR.
There are multiple approaches to find whether given string contain only whitespaces or not.
Approach 1: Using ‘str.trim().isEmpty()’ method or ‘str.strip().isEmpty()’
StringContainWhiteSpacesDemo1.java
package com.sample.app.strings;
public class StringContainWhiteSpacesDemo1 {
private static boolean containOnlyWhiteSpaces(String str) {
if (str == null) {
return false;
}
return str.trim().isEmpty();
}
public static void main(String args[]) {
String str1 = "Hello";
String str2 = "\n\t\f\r \n\t";
System.out.println("is str1 contains only whitespaces : " + containOnlyWhiteSpaces(str1));
System.out.println("is str2 contains only whitespaces : " + containOnlyWhiteSpaces(str2));
}
}
But there is a limitation in using trim() method. String::trim has existed from early days of Java when Unicode had not fully evolved to the standard we widely use today.
The definition of space used by String::trim is any code point less than or equal to the space code point (\u0020), commonly referred to as ASCII or ISO control characters.
Java11 defined strip() api to address this problem. strip() is "Unicode-aware" evolution of trim().
StringContainWhiteSpacesDemo1.java
public class StringContainWhiteSpacesDemo1 {
private static boolean containOnlyWhiteSpaces(String str) {
if (str == null) {
return false;
}
return str.strip().isEmpty();
}
public static void main(String args[]) {
String str1 = "Hello";
String str2 = "\n\t\f\r \n\t";
System.out.println("is str1 contains only whitespaces : " + containOnlyWhiteSpaces(str1));
System.out.println("is str2 contains only whitespaces : " + containOnlyWhiteSpaces(str2));
}
}
Approach 2: Using Character.isWhitespace method.
public static boolean isWhitespace(char ch)
public static boolean isWhitespace(int codePoint)
'isWhitespace' method return true if the character is a Java whitespace character, false otherwise. 'isWhitespace(char ch)'. isWhitespace(char ch) method cannot handle supplementary characters. To support all Unicode characters, including supplementary characters, use the isWhitespace(int) method.
StringContainWhiteSpacesDemo2.java
package com.sample.app.strings;
public class StringContainWhiteSpacesDemo2 {
private static boolean containOnlyWhiteSpaces(String str) {
if (str == null) {
return false;
}
char[] chars = str.toCharArray();
for (Character ch : chars) {
if (!Character.isWhitespace((int) ch)) {
return false;
}
}
return true;
}
public static void main(String args[]) {
String str1 = "Hello";
String str2 = "\n\t\f\r \n\t";
System.out.println("is str1 contains only whitespaces : " + containOnlyWhiteSpaces(str1));
System.out.println("is str2 contains only whitespaces : " + containOnlyWhiteSpaces(str2));
}
}
Approach 3: Using String#isBlank() method
isBlank() method is introduced in Java11. This method return true, if the string is empty or contains only white space codepoints, otherwise false.
StringContainWhiteSpacesDemo3.java
public class StringContainWhiteSpacesDemo3 {
private static boolean containOnlyWhiteSpaces(String str) {
if (str == null) {
return false;
}
return str.isBlank();
}
public static void main(String args[]) {
String str1 = "Hello";
String str2 = "\n\t\f\r \n\t";
System.out.println("is str1 contains only whitespaces : " + containOnlyWhiteSpaces(str1));
System.out.println("is str2 contains only whitespaces : " + containOnlyWhiteSpaces(str2));
}
}
References
https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isWhitespace(char)
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#isBlank()
https://bugs.openjdk.java.net/browse/JDK-8200378
You may like
How to check the type of a variable in Java?
Set a system property in command line
How to get the capacity of ArrayList in Java?
volatile reference vs Atomic references defined in java.util.concurrent.atomic package
No comments:
Post a Comment