我宁愿不使用String.trim来检查是否存在空格。它正在做的工作比你需要的多,因为它检查字符串的两端(即使在另一端找到非空格),并返回一个新的 String 对象。因此,我更喜欢实现一个仅检查空格的方法。
所以我的建议(如果自己实现)如下:
public static boolean isNullOrEmpty(String s) {
return s == null || s.length() == 0;
}
public static boolean isNullOrWhitespace(String s) {
return s == null || isWhitespace(s);
}
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
if (!Character.isWhitespace(s.charAt(i))) {
return false;
}
}
return true;
}
return false;
}
或者从String.trim的实现中得到提示,你可以使用字符比较而不是Charact.isWhitespace():
// checking for whitespace like String.trim() does
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
if (s.charAt(i) > ' ') {
return false;
}
}
return true;
}
return false;
}
最后,我会考虑在每次迭代中检查字符串的两端,向内步进。这将最大限度地减少获取答案所需的迭代次数,无论字符串的前面还是末尾都存在空格。
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int start = 0, middle = length / 2, end = length - 1; start <= middle; start++, end--) {
if (s.charAt(start) > ' ' || s.charAt(end) > ' ') {
return false;
}
}
return true;
}
return false;
}