I have a json in which userId property is coming as string "null" -
"userId":"null"
I have a method which checks whether my string is null or not -
public static boolean isEmpty(String value) {
return value == null || value.isEmpty();
}
But every time my above method returns back me as false for above userId? It should true since userId is null. Is there any other api in Guava or Apache Commons which can do this?
The value null is not equal to the String "null". null means that a given object has not been assigned a value, where the String "null" is a valid object. It contains the characters n u l l, which is a valid value for a String. You need to also check if the value is the literal string "null" in order to do what you want.
Correct Check
return value == null || value.isEmpty() || value.equals("null") ;
If you want to still maintain "null" as a valid username, then change whatever is sending the json to the following format, which should be interpreted as a literal null rather than a String with content "null"
"userId":null
"null" is not the same as null.
"null" is a string 4 characters in length of the word "null".
null (no quotes) is just that--nothing.
{"userId":"null"} equals String userId = "null" in java.
{} would equal String userId = null when unmarshalled.
Related
Is there any utility available to easily get the string representation of an arbitrary object if it exists and keep it null if it was null?
For example
String result = null;
if (object != null) {
result = object.toString();
}
but less verbose.
I have looked into ObjectUtils and String.valueOf but neither returns just null itself. Both return default strings, i.e. the empty string or the string "null" instead of just null.
If I understand your problem, you can use that (java.util.Objects is here since JDK7):
Objects.toString(s, null); // return null if s is null, s.toString() otherwise
In fact, it works for every object.
I am .net programmer and completely new in java. I am facing problem in handling null string in java. I am assigning value from string array to string variable completeddate.
I tried all this but that didn't work.
String COMPLETEDATE;
COMPLETEDATE = country[23];
if(country[23] == null && country[23].length() == 0)
{
// ...
}
if (COMPLETEDATE.equals("null"))
{
// ...
}
if(COMPLETEDATE== null)
{
// ...
}
if(COMPLETEDATE == null || COMPLETEDATE.equals("null"))
{
// ...
}
For starters...the safest way to compare a String against a potentially null value is to put the guaranteed not-null String first, and call .equals on that:
if("constantString".equals(COMPLETEDDATE)) {
// logic
}
But in general, your approach isn't correct.
The first one, as I commented, will always generate a NullPointerException is it's evaluated past country[23] == null. If it's null, it doesn't have a .length property. You probably meant to call country[23] != null instead.
The second approach only compares it against the literal string "null", which may or may not be true given the scope of your program. Also, if COMPLETEDDATE itself is null, it will fail - in that case, you would rectify it as I described above.
Your third approach is correct in the sense that it's the only thing checking against null. Typically though, you would want to do some logic if the object you wanted wasn't null.
Your fourth approach is correct by accident; if COMPLETEDDATE is actually null, the OR will short-circuit. It could also be true if COMPLETEDDATE was equal to the literal "null".
To check null string you can use Optional in Java 8 as below:
import Optional
import java.util.Optional;
import it as above
String str= null;
Optional<String> str2 = Optional.ofNullable(str);
then use isPresent() , it will return false if str2 contains NULL otherwise true
if(str2.isPresent())
{
//If No NULL
}
else
{
//If NULL
}
reference: https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
It is not entirely clear what you are asking, but to check if a String variable is null, use the following statement.
if(myString==null)
This checks whether the object reference is null.
The following statement, which you have written is incorrect for two reasons.
if (COMPLETEDATE.equals("null"))
{
// ...
}
1. null is a keyword in Java, "null" is just a string of text.
2. .equals() checks to see if two objects are equal according to the given method's definition of equality. Null checks should always be made using the == comparison operator, as it checks reference equality.
If a variable is null, you cannot dereference it.
That means you can not invoke methods on it.
So... The following if statement will throw a NullPointerException every time the first clause is true:
if (a == null && a.length() == 0)
In other words: if a is null, you CANNOT invoke the length method on a.
I want to get string values of my fields (they can be type of long string or any object),
if a field is null then it should return empty string, I did this with guava;
nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
But this returns null if gearbox is null! Not empty string because valueOf methdod returns string "null" which leads to errors.
Any Ideas?
EDIt: there are 100s fields I look for something easy to implement
You can use Objects.toString() (standard in Java 7):
Objects.toString(gearBox, "")
Objects.toString(id, "")
From the linked documentation:
public static String toString(Object o, String nullDefault)
Returns the result of calling toString on the first argument if the first argument is not null and returns the second argument otherwise.
Parameters:
o - an object
nullDefault - string to return if the first argument is null
Returns:
the result of calling toString on the first argument if it is not null and the second argument otherwise.
See Also:
toString(Object)
For java 8 you can use Optional approach:
Optional.ofNullable(gearBox).orElse("");
Optional.ofNullable(id).orElse("");
If you don't mind using Apache commons, they have a StringUtils.defaultString(String str) that does this.
Returns either the passed in String, or if the String is null, an empty String ("").
If you also want to get rid of "null", you can do:
StringUtils.defaultString(str).replaceAll("^null$", "")
or to ignore case:
StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
If alternative way, Guava provides Strings.nullToEmpty(String).
Source code
String str = null;
str = Strings.nullToEmpty(str);
System.out.println("String length : " + str.length());
Result
0
Use an inline null check
gearBox == null ? "" : String.valueOf(gearBox);
StringUtils.defaultString(String str) Returns either the passed in String, or if the String is null, an empty String ("").
Example from java doc
StringUtils.defaultString(null) will return ""
StringUtils.defaultString("") will return ""
StringUtils.defaultString("bat") will return "bat"
Since you're using guava:
Objects.firstNonNull(gearBox, "").toString();
In Java 9+ use : Objects.requireNonNullElse (obj, defaultObj) https://docs.oracle.com/javase/9/docs/api/java/util/Objects.html#requireNonNullElse-T-T-
//-- returns empty string if obj is null
Objects.requireNonNullElse (obj, "")
How do we compare null values ?
For example, I am trying to compare null by
class_name == "null"
But the code doesn't checks if the class is null.
What's wrong ?
You are comparing it to the reference of the String "null".
Remove the double quotes so you get the special null type (JLS).
You want:
class_name == null
↑
class_name == null because in your way you compare it to string not to null
if(class_name == null)
// do something;
I got a HttpResponse which gets a json response.
Now if the json response contains data it all works fine, but whenever the json is null my application crashes.
I've been trying to following code but with no avail.
(sb = json response)
Object result11 = sb;
Log.d("Result11", result11.toString());
if (result11 == JSONObject.NULL)
Log.d("if", "I am NULL");
else
Log.d("else", "I am not null");
I tried comparing result11 to:
null, "", "null", JSONObject.NULL
It always returns "I am not null"
Whilst the log says that Resul11 = null.
Any help would be appreciated. Thanks in advance.
EDIT:
Object result11 = sb;
Log.d("Result11", result11.toString());
StringBuilder test = (StringBuilder)result11;
if (test.toString().equals("null"))
Log.d("if", "I am NULL");
else
Log.d("else", "I am not null");
SOLUTION by #Mark Byers
test.toString().trim().equals("null")
results in "I AM NULL"
You don't have a null. You have a StringBuilder that when converted to a String contains the value "null".
To compare strings do not use the == operator. Instead you should convert to a String and use the equals method.
StringBuilder stringBuilder = (StringBuilder)result11;
String trimmed = stringBuilder.toString().trim();
if (trimmed.equals("null")) { ... }
The == operator compares the references and only returns true if the operands are references to the same object (or both null references). The equals method compares the values.
Related
Java String.equals versus ==
if you get a null result compare to a null pointer: result11 == null