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
Interview Questions
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
Check whether I have JDK or JRE in my system