源码分析八(org.springframework.util包之StringUtils类))
一:spring框架util包中的StringUtils类主要是处理关于字符串
的功能方法,下面直接结合代码分析:
//判断字符串是否为空,如果为nul或者""则返回true,否则返回false public static boolean isEmpty(Object str) { return str == null || "".equals(str); }
//判断字符串是否有长度,不等于null同时长度大于0,则为true //这里重载两个hasLength方法,其中CharSequence是String的父类,是接口 public static boolean hasLength(CharSequence str) { return str != null && str.length() > 0; } public static boolean hasLength(String str) { return hasLength(((CharSequence) (str))); }
//如果为空则直接返回false,如果字符串中有一个不是空白,则表示 //有内容,返回true public static boolean hasText(CharSequence str) { if(!hasLength(str)) return false; int strLen = str.length(); //遍历字符序列,如果其中有一个不是空白,则返回true for(int i = 0; i < strLen; i++) if(!Character.isWhitespace(str.charAt(i))) return true; return false; } public static boolean hasText(String str) { return hasText(((CharSequence) (str))); }
//判断字符串是否包含空白,如果为空则直接返回false,,遍历字符序列,如果其中 //有一个字符是空白,则返回true,如果都不是,返回false public static boolean containsWhitespace(CharSequence str) { if(!hasLength(str)) return false; int strLen = str.length(); for(int i = 0; i < strLen; i++) if(Character.isWhitespace(str.charAt(i))) return true; return false; } public static boolean containsWhitespace(String str) { return containsWhitespace(((CharSequence) (str))); }
//去除字符串前后的空白 public static String trimWhitespace(String str) { if(!hasLength(str)) return str; StringBuilder sb; //去除字符串前导空白 for(sb = new StringBuilder(str); sb.length() > 0 && Character.isWhitespace(sb.charAt(0)); sb.deleteCharAt(0)); //去除字符串后导空白 for(; sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1)); sb.deleteCharAt(sb.length() - 1)); return sb.toString(); }
//去除字符串所有空白 public static String trimAllWhitespace(String str) { if(!hasLength(str)) return str; StringBuilder sb = new StringBuilder(str); //从第一个字符开始判断,是否为空白,如果是则删除,如果不是则index加1 //判断第二个,然后一直到sb.length=index,则跳出循环 for(int index = 0; sb.length() > index;) if(Character.isWhitespace(sb.charAt(index))) sb.deleteCharAt(index); else index++; return sb.toString(); }
//去除前导空白,只取空白的前一部分 public static String trimLeadingWhitespace(String str) { if(!hasLength(str)) return str; StringBuilder sb; //去除前导空白 for(sb = new StringBuilder(str); sb.length() > 0 && Character.isWhitespace(sb.charAt(0)); sb.deleteCharAt(0)); return sb.toString(); }
//去除后导空白,取去除空白后一部分 public static String trimTrailingWhitespace(String str) { if(!hasLength(str)) return str; StringBuilder sb; //去除后导空白 for(sb = new StringBuilder(str); sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1)); sb.deleteCharAt(sb.length() - 1)); return sb.toString(); }
//删除前导为leadingCharacter的字符 public static String trimLeadingCharacter(String str, char leadingCharacter) { if(!hasLength(str)) return str; StringBuilder sb; //只要前导是指定字符则删除 for(sb = new StringBuilder(str); sb.length() > 0 && sb.charAt(0) == leadingCharacter; sb.deleteCharAt(0)); return sb.toString(); }
//删除后导字符trailingCharacter public static String trimTrailingCharacter(String str, char trailingCharacter) { if(!hasLength(str)) return str; StringBuilder sb; //只要后导是指定字符则删除 for(sb = new StringBuilder(str); sb.length() > 0 && sb.charAt(sb.length() - 1) == trailingCharacter; sb.deleteCharAt(sb.length() - 1)); return sb.toString(); }
//忽略大小写,判断字符串是否已prefix开始 public static boolean startsWithIgnoreCase(String str, String prefix) { //如果源字符串str或者前缀字符串prefix为null,则返回false if(str == null || prefix == null) return false; //如果str以prefix开始,return true if(str.startsWith(prefix)) return true; //如果源字符串的长度小于prefix的长度,返回false if(str.length() < prefix.length()) { return false; } else { 将源字符串prefix长度转换为小写,前缀字符串也转换为小写,比较是否相等 String lcStr = str.substring(0, prefix.length()).toLowerCase(); String lcPrefix = prefix.toLowerCase(); return lcStr.equals(lcPrefix); } }
//忽略大小写,判断源字符串str是否以suffix结尾,处理逻辑类似上一个方法 public static boolean endsWithIgnoreCase(String str, String suffix) { if(str == null || suffix == null) return false; if(str.endsWith(suffix)) return true; if(str.length() < suffix.length()) { return false; } else { String lcStr = str.substring(str.length() - suffix.length()).toLowerCase(); String lcSuffix = suffix.toLowerCase(); return lcStr.equals(lcSuffix); } }