Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How best to determine if a String contains only null characters?

What's the right way to check if a string contains null characters only?

String s = "\u0000";
if(s.charAt(0) == 0) {
   System.out.println("null characters only");
}

Or

String s = "\0\0";
for(int i = 0; i < s.length(); i++) {
   if(s.charAt(i) == 0) 
       continue;

   else break;

}

Both work. But is there a better and more concise way to perform this check. Is there a utility to check if a string in java contains only null characters(\u0000 OR \0) ?

And what is the difference between '\0' and '\u0000'?

like image 344
tusharRawat Avatar asked May 13 '21 02:05

tusharRawat


3 Answers

A char literal (in Java) can be written multiple ways (all of which are equivalent). For example,

System.out.println('\u0000' == '\0');
System.out.println('\u0000' == 0);

Will output

true
true

because a char is a 16-bit integral type in Java. And all three of \u0000, \0 and 0 are the same value. As for finding if a String contains only 0 char values - simply iterate it. Like,

boolean allNulls = true;
for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) != 0) {
        allNulls = false;
        break;
    }
}
like image 132
Elliott Frisch Avatar answered Oct 24 '22 05:10

Elliott Frisch


You can get the chars() as an IntStream, then use allMatch:

if (yourString.chars().allMatch(x -> x == 0)) {
    // all null chars!
}
like image 5
Sweeper Avatar answered Oct 24 '22 05:10

Sweeper


You can use a regular expression

to match one or more \u0000

boolean onlyNulls = string.matches("\u0000+");  // or "\0+"

use * instead of + to also match the empty string


(the stream solution by Sweeper is my preferred solution - IMHO it better resembles the intended task, despite I would use '\u0000' instead of 0)

like image 3
2 revsuser15793316 Avatar answered Oct 24 '22 06:10

2 revsuser15793316