前言
在实际Java开发当中,我们肯定要判读字符串是否为空的需求。今天遇到一个比较奇葩的问题,我们公司服务器接口明明返回时空字符串给我,可是我用传统的方法去判断就是不为空的情况。
复现一下问题
if(str !=null || str.length > 0 || !"".equals(str) || !str.isEmpty()){
System.out.println("字符串不为空!");
}else{
System.out.println("字符串为空!");
}
上面的方法,本应该是没有问题的。但是结果总是让人意外的…
我的解决办法
我在友盟的SDK中找到StringUtils的字符串工具类,网上也有说添加commons-lang-2.5.jar
也有StringUtlis方法。
if(StringUtils.isNotBlank(str)){
System.out.println("字符串不为空!");
}else if(StringUtils.isBlank(str)){
System.out.println("字符串为空!");
}
友盟SDK的StringUtils源码
import android.text.TextUtils;
import java.security.MessageDigest;
public class StringUtils {
private static final char[] DIGITS_LOWER = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public StringUtils() {
}
public static String[] parseURL(String var0) {
if (TextUtils.isEmpty(var0)) {
return null;
} else {
if (var0.startsWith("//")) {
var0 = "http:" + var0;
}
int var1 = var0.indexOf("://");
if (var1 == -1) {
return null;
} else {
String[] var2 = new String[2];
String var3 = var0.substring(0, var1);
if (!"http".equalsIgnoreCase(var3) && !"https".equalsIgnoreCase(var3)) {
return null;
} else {
var2[0] = var3;
int var4 = var0.length();
int var5;
for(var5 = var1 + 3; var5 < var4; ++var5) {
char var6 = var0.charAt(var5);
if (var6 == '/' || var6 == ':' || var6 == '?' || var6 == '#') {
var2[1] = var0.substring(var1 + 3, var5);
return var2;
}
}
if (var5 == var4) {
var2[1] = var0.substring(var1 + 3);
return var2;
} else {
return null;
}
}
}
}
}
public static String concatString(String var0, String var1) {
return (new StringBuilder(var0.length() + var1.length())).append(var0).append(var1).toString();
}
public static String concatString(String var0, String var1, String var2) {
return (new StringBuilder(var0.length() + var1.length() + var2.length())).append(var0).append(var1).append(var2).toString();
}
public static String buildKey(String var0, String var1) {
return concatString(var0, "://", var1);
}
public static String simplifyString(String var0, int var1) {
return var0.length() <= var1 ? var0 : concatString(var0.substring(0, var1), "......");
}
public static String stringNull2Empty(String var0) {
return var0 == null ? "" : var0;
}
public static String md5ToHex(String var0) {
if (var0 == null) {
return null;
} else {
try {
MessageDigest var1 = MessageDigest.getInstance("MD5");
return bytesToHexString(var1.digest(var0.getBytes("utf-8")));
} catch (Exception var2) {
return null;
}
}
}
private static String bytesToHexString(byte[] var0, char[] var1) {
int var2 = var0.length;
char[] var3 = new char[var2 << 1];
int var4 = 0;
for(int var5 = 0; var4 < var2; ++var4) {
var3[var5++] = var1[(240 & var0[var4]) >>> 4];
var3[var5++] = var1[15 & var0[var4]];
}
return new String(var3);
}
public static String bytesToHexString(byte[] var0) {
return var0 == null ? "" : bytesToHexString(var0, DIGITS_LOWER);
}
public static String longToIP(long var0) {
StringBuilder var2 = new StringBuilder(16);
long var3 = 1000000000L;
do {
var2.append(var0 / var3);
var2.append('.');
var0 %= var3;
var3 /= 1000L;
} while(var3 > 0L);
var2.setLength(var2.length() - 1);
return var2.toString();
}
public static boolean isNotBlank(String var0) {
return !isBlank(var0);
}
public static boolean isBlank(String var0) {
int var1;
if (var0 != null && (var1 = var0.length()) != 0) {
for(int var2 = 0; var2 < var1; ++var2) {
if (!Character.isWhitespace(var0.charAt(var2))) {
return false;
}
}
return true;
} else {
return true;
}
}
}
总结
最后才发现可能是接口回传是一个空格之类的,我用上面的方法解决了。希望对Java开发的小伙伴有帮助。