String 的工具方法整理

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * 字符串工具类,提供一些字符串相关的便捷方法
 */
public class StringUtil {
 
	private StringUtil() {
        throw new AssertionError();
    }
	
	/**
     * <pre>
     * isBlank(null) = true;
     * isBlank("") = true;
     * isBlank("  ") = true;
     * isBlank("a") = false;
     * isBlank("a ") = false;
     * isBlank(" a") = false;
     * isBlank("a b") = false;
     * </pre>
     *
     * @param str 字符串
     * @return 如果字符串为空或者长度为0,返回true,否则返回false
     */
	public static boolean isBlank(String str) {
		return (str == null || str.trim().length() == 0);
	}
	
	/**
     * <pre>
     * isEmpty(null) = true;
     * isEmpty("") = true;
     * isEmpty("  ") = false;
     * </pre>
     *
     * @param c 字符序列
     * @return 如果字符序列为空或者长度为0,返回true,否则返回false
     */
	public static boolean isEmpty(CharSequence c) {
		return (c == null || c.length() == 0);
	}
	
	 /**
     * 获取字符序列的长度
     * <pre>
     * length(null) = 0;
     * length(\"\") = 0;
     * length(\"abc\") = 3;
     * </pre>
     *
     * @param c 字符序列
     * @return 如果字符序列为空,返回0,否则返回字符序列的长度
     */
	public static int length(CharSequence c) {
		return c == null ? 0 : c.length();
	}
	
	/**
     * null Object to empty string
     *	空对象转化成空字符串
     * <pre>
     * nullStrToEmpty(null) = "";
     * nullStrToEmpty("") = "";
     * nullStrToEmpty("aa") = "aa";
     * </pre>
     *
     * @param object 对象
     * @return String
     */
    public static String nullStrToEmpty(Object object) {
    	return object == null ?
    			"" : (object instanceof String ? (String)object : object.toString());
    }
    
    /**
     * @param str str
     * @return String
     */
    public static String capitalizeFirstLetter(String str) {
    	if (isEmpty(str)) {
			return str;
		}
    	char c = str.charAt(0);
    	return (!Character.isLetter(c) || Character.isUpperCase(c))
                ? str
                : new StringBuilder(str.length()).append(
                Character.toUpperCase(c))
                .append(str.substring(1))
                .toString();
    }
    
    /**
     * 用utf-8编码
     * @param str 字符串
     * @return 返回一个utf8的字符串
     */
    public static String utf8Encode(String str) {
    	if (!isEmpty(str) || str.getBytes().length != str.length()) {
			try {
				return URLEncoder.encode(str, "utf-8");
			} catch (UnsupportedEncodingException e) {
				throw new RuntimeException(
                        "UnsupportedEncodingException occurred. ", e);
			}
		}
    	return str;
    }
    
    /**
     * @param href 字符串
     * @return 返回一个html
     */
    public static String getHrefInnerHtml(String href) {
    	if (isEmpty(href)) {
            return "";
        }
    	String hrefReg = ".*<[\\s]*a[\\s]*.*>(.+?)<[\\s]*/a[\\s]*>.*";
    	Pattern hrefPattern = Pattern.compile(hrefReg, Pattern.CASE_INSENSITIVE);
    	Matcher hrefMatcher = hrefPattern.matcher(href);
    	if (hrefMatcher.matches()) {
			return hrefMatcher.group(1);
		}
    	return href;
    }
    
    /**
     * @param source 字符串
     * @return 返回htmL到字符串
     */
    public static String htmlEscapeCharsToString(String source) {
    	return StringUtil.isEmpty(source)
                ? source
                : source.replaceAll("<", "<")
                .replaceAll(">", ">")
                .replaceAll("&", "&")
                .replaceAll(""", "\""); 
    }
    
    /**
     * @param s 字符串
     * @return String
     */
    public static String fullWidthToHalfWidth(String s) {
    	if (isEmpty(s)) {
            return s;
        }
    	char[] source = s.toCharArray();
        for (int i = 0; i < source.length; i++) {
            if (source[i] == 12288) {
                source[i] = ' ';
                // } else if (source[i] == 12290) {
                // source[i] = '.';
            }
            else if (source[i] >= 65281 && source[i] <= 65374) {
                source[i] = (char) (source[i] - 65248);
            }
            else {
                source[i] = source[i];
            }
        }
        return new String(source);
    }
    
    /**
     * @param s 字符串
     * @return 返回的数值
     */
    public static String halfWidthToFullWidth(String s) {
 
        if (isEmpty(s)) {
            return s;
        }
 
        char[] source = s.toCharArray();
        for (int i = 0; i < source.length; i++) {
            if (source[i] == ' ') {
                source[i] = (char) 12288;
                // } else if (source[i] == '.') {
                // source[i] = (char)12290;
            }
            else if (source[i] >= 33 && source[i] <= 126) {
                source[i] = (char) (source[i] + 65248);
            }
            else {
                source[i] = source[i];
            }
        }
        return new String(source);
    }
 
 
    /**
     * @param str 资源
     * @return 特殊字符串切换
     */
 
    public static String replaceBlanktihuan(String str) {
 
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
 
 
    /**
     * 判断给定的字符串是否为null或者是空的
     * @param string 给定的字符串
     */
    public static boolean isEmpty(String string) {
        return string == null || "".equals(string.trim());
    }
 
 
    /**
     * 判断给定的字符串是否不为null且不为空
     * @param string 给定的字符串
     */
    public static boolean isNotEmpty(String string) {
        return !isEmpty(string);
    }
 
 
    /**
     * 判断给定的字符串数组中的所有字符串是否都为null或者是空的
     * @param strings 给定的字符串
     */
    public static boolean isEmpty(String... strings) {
        boolean result = true;
        for (String string : strings) {
            if (isNotEmpty(string)) {
                result = false;
                break;
            }
        }
        return result;
    }
 
 
    /**
     * 判断给定的字符串数组中是否全部都不为null且不为空
     *
     * @param strings 给定的字符串数组
     * @return 是否全部都不为null且不为空
     */
    public static boolean isNotEmpty(String... strings) {
        boolean result = true;
        for (String string : strings) {
            if (isEmpty(string)) {
                result = false;
                break;
            }
        }
        return result;
    }
 
 
    /**
     * 如果字符串是null或者空就返回""
     */
    public static String filterEmpty(String string) {
        return StringUtil.isNotEmpty(string) ? string : "";
    }
 
 
    /**
     * 在给定的字符串中,用新的字符替换所有旧的字符
     * @param string 给定的字符串
     * @param oldchar 旧的字符
     * @param newchar 新的字符
     * @return 替换后的字符串
     */
    public static String replace(String string, char oldchar, char newchar) {
        char chars[] = string.toCharArray();
        for (int w = 0; w < chars.length; w++) {
            if (chars[w] == oldchar) {
                chars[w] = newchar;
                break;
            }
        }
        return new String(chars);
    }
 
 
    /**
     * 把给定的字符串用给定的字符分割
     * @param string 给定的字符串
     * @param ch 给定的字符
     * @return 分割后的字符串数组
     */
    public static String[] split(String string, char ch) {
        ArrayList<String> stringList = new ArrayList<String>();
        char chars[] = string.toCharArray();
        int nextStart = 0;
        for (int w = 0; w < chars.length; w++) {
            if (ch == chars[w]) {
                stringList.add(new String(chars, nextStart, w - nextStart));
                nextStart = w + 1;
                if (nextStart ==
                        chars.length) {    //当最后一位是分割符的话,就再添加一个空的字符串到分割数组中去
                    stringList.add("");
                }
            }
        }
        if (nextStart <
                chars.length) {    //如果最后一位不是分隔符的话,就将最后一个分割符到最后一个字符中间的左右字符串作为一个字符串添加到分割数组中去
            stringList.add(new String(chars, nextStart,
                    chars.length - 1 - nextStart + 1));
        }
        return stringList.toArray(new String[stringList.size()]);
    }
 
 
    /**
     * 计算给定的字符串的长度,计算规则是:一个汉字的长度为2,一个字符的长度为1
     *
     * @param string 给定的字符串
     * @return 长度
     */
    public static int countLength(String string) {
        int length = 0;
        char[] chars = string.toCharArray();
        for (int w = 0; w < string.length(); w++) {
            char ch = chars[w];
            if (ch >= '\u0391' && ch <= '\uFFE5') {
                length++;
                length++;
            }
            else {
                length++;
            }
        }
        return length;
    }
 
    private static char[] getChars(char[] chars, int startIndex) {
        int endIndex = startIndex + 1;
        //如果第一个是数字
        if (Character.isDigit(chars[startIndex])) {
            //如果下一个是数字
            while (endIndex < chars.length &&
                    Character.isDigit(chars[endIndex])) {
                endIndex++;
            }
        }
        char[] resultChars = new char[endIndex - startIndex];
        System.arraycopy(chars, startIndex, resultChars, 0, resultChars.length);
        return resultChars;
    }
 
 
    /**
     * 是否全是数字
     */
    public static boolean isAllDigital(char[] chars) {
        boolean result = true;
        for (int w = 0; w < chars.length; w++) {
            if (!Character.isDigit(chars[w])) {
                result = false;
                break;
            }
        }
        return result;
    }
 
 
 
 
    /**
     * 删除给定字符串中所有的旧的字符
     *
     * @param string 源字符串
     * @param ch 要删除的字符
     * @return 删除后的字符串
     */
    public static String removeChar(String string, char ch) {
        StringBuffer sb = new StringBuffer();
        for (char cha : string.toCharArray()) {
            if (cha != '-') {
                sb.append(cha);
            }
        }
        return sb.toString();
    }
 
 
    /**
     * 删除给定字符串中给定位置处的字符
     *
     * @param string 给定字符串
     * @param index 给定位置
     */
    public static String removeChar(String string, int index) {
        String result = null;
        char[] chars = string.toCharArray();
        if (index == 0) {
            result = new String(chars, 1, chars.length - 1);
        }
        else if (index == chars.length - 1) {
            result = new String(chars, 0, chars.length - 1);
        }
        else {
            result = new String(chars, 0, index) +
                    new String(chars, index + 1, chars.length - index);
            ;
        }
        return result;
    }
 
 
    /**
     * 删除给定字符串中给定位置处的字符
     *
     * @param string 给定字符串
     * @param index 给定位置
     * @param ch 如果同给定位置处的字符相同,则将给定位置处的字符删除
     */
    public static String removeChar(String string, int index, char ch) {
        String result = null;
        char[] chars = string.toCharArray();
        if (chars.length > 0 && chars[index] == ch) {
            if (index == 0) {
                result = new String(chars, 1, chars.length - 1);
            }
            else if (index == chars.length - 1) {
                result = new String(chars, 0, chars.length - 1);
            }
            else {
                result = new String(chars, 0, index) +
                        new String(chars, index + 1, chars.length - index);
                ;
            }
        }
        else {
            result = string;
        }
        return result;
    }
 
 
    /**
     * 对给定的字符串进行空白过滤
     *
     * @param string 给定的字符串
     * @return 如果给定的字符串是一个空白字符串,那么返回null;否则返回本身。
     */
    public static String filterBlank(String string) {
        if ("".equals(string)) {
            return null;
        }
        else {
            return string;
        }
    }
 
 
    /**
     * 将给定字符串中给定的区域的字符转换成小写
     *
     * @param str 给定字符串中
     * @param beginIndex 开始索引(包括)
     * @param endIndex 结束索引(不包括)
     * @return 新的字符串
     */
    public static String toLowerCase(String str, int beginIndex, int endIndex) {
        return str.replaceFirst(str.substring(beginIndex, endIndex),
                str.substring(beginIndex, endIndex)
                        .toLowerCase(Locale.getDefault()));
    }
 
 
    /**
     * 将给定字符串中给定的区域的字符转换成大写
     *
     * @param str 给定字符串中
     * @param beginIndex 开始索引(包括)
     * @param endIndex 结束索引(不包括)
     * @return 新的字符串
     */
    public static String toUpperCase(String str, int beginIndex, int endIndex) {
        return str.replaceFirst(str.substring(beginIndex, endIndex),
                str.substring(beginIndex, endIndex)
                        .toUpperCase(Locale.getDefault()));
    }
 
 
    /**
     * 将给定字符串的首字母转为小写
     *
     * @param str 给定字符串
     * @return 新的字符串
     */
    public static String firstLetterToLowerCase(String str) {
        return toLowerCase(str, 0, 1);
    }
 
 
    /**
     * 将给定字符串的首字母转为大写
     *
     * @param str 给定字符串
     * @return 新的字符串
     */
    public static String firstLetterToUpperCase(String str) {
        return toUpperCase(str, 0, 1);
    }
 
 
    /**
     * 将给定的字符串MD5加密
     *
     * @param string 给定的字符串
     * @return MD5加密后生成的字符串
     */
    public static String MD5(String string) {
        String result = null;
        try {
            char[] charArray = string.toCharArray();
            byte[] byteArray = new byte[charArray.length];
            for (int i = 0; i < charArray.length; i++) {
                byteArray[i] = (byte) charArray[i];
            }
 
            StringBuffer hexValue = new StringBuffer();
            byte[] md5Bytes = MessageDigest.getInstance("MD5")
                    .digest(byteArray);
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
 
            result = hexValue.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
 
 
    /**
     * 判断给定的字符串是否以一个特定的字符串开头,忽略大小写
     *
     * @param sourceString 给定的字符串
     * @param newString 一个特定的字符串
     */
    public static boolean startsWithIgnoreCase(String sourceString, String newString) {
        int newLength = newString.length();
        int sourceLength = sourceString.length();
        if (newLength == sourceLength) {
            return newString.equalsIgnoreCase(sourceString);
        }
        else if (newLength < sourceLength) {
            char[] newChars = new char[newLength];
            sourceString.getChars(0, newLength, newChars, 0);
            return newString.equalsIgnoreCase(String.valueOf(newChars));
        }
        else {
            return false;
        }
    }
 
 
    /**
     * 判断给定的字符串是否以一个特定的字符串结尾,忽略大小写
     *
     * @param sourceString 给定的字符串
     * @param newString 一个特定的字符串
     */
    public static boolean endsWithIgnoreCase(String sourceString, String newString) {
        int newLength = newString.length();
        int sourceLength = sourceString.length();
        if (newLength == sourceLength) {
            return newString.equalsIgnoreCase(sourceString);
        }
        else if (newLength < sourceLength) {
            char[] newChars = new char[newLength];
            sourceString.getChars(sourceLength - newLength, sourceLength,
                    newChars, 0);
            return newString.equalsIgnoreCase(String.valueOf(newChars));
        }
        else {
            return false;
        }
    }
 
 
    /**
     * 检查字符串长度,如果字符串的长度超过maxLength,就截取前maxLength个字符串并在末尾拼上appendString
     */
    public static String checkLength(String string, int maxLength, String appendString) {
        if (string.length() > maxLength) {
            string = string.substring(0, maxLength);
            if (appendString != null) {
                string += appendString;
            }
        }
        return string;
    }
 
 
    /**
     * 检查字符串长度,如果字符串的长度超过maxLength,就截取前maxLength个字符串并在末尾拼上…
     */
    public static String checkLength(String string, int maxLength) {
        return checkLength(string, maxLength, "…");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java开发中,我们经常需要使用各种工具类来简化和优化我们的代码。下面是一些常用的Java工具类: 1. StringUtils: StringUtils是Apache Commons Lang库中的一个工具类,提供了许多字符串处理的方法,如判断字符串是否为空、去除空格、截取指定长度等。 2. DateUtils: DateUtils也是Apache Commons Lang库的一个工具类,用于日期和时间的处理。它提供了一些常用的方法,如日期格式化、日期比较、日期计算等。 3. MathUtils: MathUtils是一个自定义的工具类,提供了一些数学运算的方法,如求平均数、求最大最小值、四舍五入等。这些方法可以方便地在我们的代码中进行数学计算。 4. FileUtils: FileUtils是Apache Commons IO库中的一个工具类,用于处理文件和目录。它提供了一些常用的方法,如复制文件、删除文件、读取文件内容等。 5. CollectionUtils: CollectionUtils是Apache Commons Collections库的一个工具类,用于集合的操作。它提供了一些方便的方法,如判断集合是否为空、合并集合、过滤集合等。 6. HttpClientUtils: HttpClientUtils是Apache HttpClient库的一个工具类,用于发送HTTP请求。它提供了一些方法,如发送GET请求、发送POST请求、设置请求头等。 7. JsonUtils: JsonUtils是一个自定义的工具类,用于处理JSON数据。它提供了一些方法,如将Java对象转换为JSON字符串、将JSON字符串转换为Java对象等。 8. ReflectionUtils: ReflectionUtils是一个自定义的工具类,用于反射操作。它提供了一些方法,如获取类的所有字段、调用类的方法、创建类的实例等。 以上是一些常用的Java工具类,它们可以在我们的开发过程中提供便利,帮助我们更高效地编写代码。当然,根据具体的需求,我们还可以自定义一些工具类来满足特定的业务需求。 ### 回答2: 在Java开发中,工具类是经常用到的,可以提高开发效率和代码重用性。以下是一些常用的Java工具类: 1. String工具类:提供常用的字符串操作方法,如字符串判空、大小写转换、字符串拼接、去除空格等。 2. File工具类:提供文件操作的方法,如文件拷贝、文件删除、文件重命名、文件大小获取等。 3. Date工具类:提供日期操作的方法,如日期格式化、日期比较、日期加减操作等。 4. Collection工具类:提供集合操作的方法,如集合判空、集合拷贝、集合反转等。 5. Math工具类:提供数学计算的方法,如绝对值、最大值、最小值、四舍五入等。 6. Random工具类:提供生成随机数的方法,如生成指定范围的随机整数、生成随机字符串等。 7. JSON工具类:提供JSON数据转换的方法,如JSON对象转字符串、字符串转JSON对象等。 8. JDBC工具类:提供数据库连接和操作的方法,如数据库连接、SQL执行、结果集解析等。 9. XML工具类:提供XML数据解析和生成的方法,如解析XML文件、生成XML文件等。 10. 加密解密工具类:提供常用的加密解密算法,如MD5加密、BASE64编码等。 以上是一些常用的Java工具类,可以根据项目需求和具体场景选择使用。这些工具类可以节省开发时间、提高代码质量,是Java开发中必不可少的辅助工具。 ### 回答3: 为了方便开发人员编写Java代码,提高代码的重用性和可维护性,常常会整理收集一些常用的Java工具类。这些工具类涵盖了各种常见的功能,如字符串处理、日期时间操作、文件处理、网络通讯等。 首先,字符串处理是开发中常见的需求之一。收集的Java工具类中包含了字符串的各种操作方法,比如字符串的截取、拼接、替换、查找等。这些方法可以帮助开发人员更方便地操纵字符串,完成各种需求。 其次,日期时间操作是常用的功能之一。Java工具类中包含了日期时间的各种处理方法,如日期格式化、日期比较、日期加减等。这些方法可以帮助开发人员快速处理日期时间相关的需求,提高开发效率。 另外,文件处理也是常见的功能之一。Java工具类中包含了文件的各种处理方法,比如读取文件内容、写入文件内容、复制文件、删除文件等。这些方法可以帮助开发人员更方便地对文件进行操作,提供了文件处理的便利性。 最后,网络通讯也是常见的功能之一。Java工具类中包含了网络通讯的各种方法,如发送HTTP请求、接收HTTP响应、解析JSON等。这些方法可以帮助开发人员更方便地进行网络通讯操作,实现与服务器交互的功能。 综上所述,整理收集的常用Java工具类涵盖了字符串处理、日期时间操作、文件处理、网络通讯等各种常见的功能。这些工具类可以帮助开发人员更快速、方便地完成开发任务,提高代码的质量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值