java语言StringUtils工具类

2023-11-08

import com.mls.util.tool.codec.EncodeUtils;
import com.mls.util.tool.collect.ListUtils;
import org.apache.commons.lang3.StringEscapeUtils;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
 * @version 2018-1-6
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {
	
    private static final char SEPARATOR = '_';
    private static final String CHARSET_NAME = "UTF-8";
    
    /**
     * 转换为字节数组
     * @param str
     * @return
     */
    public static byte[] getBytes(String str){
    	if (str != null){
    		try {
				return str.getBytes(CHARSET_NAME);
			} catch (UnsupportedEncodingException e) {
				return null;
			}
    	}else{
    		return null;
    	}
    }
    
    /**
     * 转换为字节数组
     * @param str
     * @return
     */
    public static String toString(byte[] bytes){
    	try {
			return new String(bytes, CHARSET_NAME);
		} catch (UnsupportedEncodingException e) {
			return EMPTY;
		}
    }
    
    /**
     * 是否包含字符串
     * @param str 验证字符串
     * @param strs 字符串组
     * @return 包含返回true
     */
    public static boolean inString(String str, String... strs){
    	if (str != null && strs != null){
        	for (String s : strs){
        		if (str.equals(trim(s))){
        			return true;
        		}
        	}
    	}
    	return false;
    }
    
    /**
     * 是否包含字符串
     * @param str 验证字符串
     * @param strs 字符串组
     * @return 包含返回true
     */
    public static boolean inStringIgnoreCase(String str, String... strs){
    	if (str != null && strs != null){
        	for (String s : strs){
        		if (str.equalsIgnoreCase(trim(s))){
        			return true;
        		}
        	}
    	}
    	return false;
    }
	
	/**
	 * 替换掉HTML标签方法
	 */
	public static String stripHtml(String html) {
		if (isBlank(html)){
			return "";
		}
		//html.replaceAll("\\&[a-zA-Z]{0,9};", "").replaceAll("<[^>]*>", "");
		String regEx = "<.+?>";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(html);
		String s = m.replaceAll("");
		return s;
	}
	
	/**
	 * 替换为手机识别的HTML,去掉样式及属性,保留回车。
	 * @param html
	 * @return
	 */
	public static String toMobileHtml(String html){
		if (html == null){
			return "";
		}
		return html.replaceAll("<([a-z]+?)\\s+?.*?>", "<$1>");
	}
	
	/**
	 * 对txt进行HTML编码,并将\n转换为&gt;br/&lt;、\t转换为&nbsp; &nbsp;
	 * @param txt
	 * @return
	 */
	public static String toHtml(String txt){
		if (txt == null){
			return "";
		}
		return replace(replace(EncodeUtils.encodeHtml(trim(txt)), "\n", "<br/>"), "\t", "&nbsp; &nbsp; ");
	}

	/**
	 * 缩略字符串(不区分中英文字符)
	 * @param str 目标字符串
	 * @param length 截取长度
	 * @return
	 */
	public static String abbr(String str, int length) {
		if (str == null) {
			return "";
		}
		try {
			StringBuilder sb = new StringBuilder();
			int currentLength = 0;
			for (char c : stripHtml(StringEscapeUtils.unescapeHtml4(str)).toCharArray()) {
				currentLength += String.valueOf(c).getBytes("GBK").length;
				if (currentLength <= length - 3) {
					sb.append(c);
				} else {
					sb.append("...");
					break;
				}
			}
			return sb.toString();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return "";
	}
	
	// 缩略字符串替换Html正则表达式预编译
	private static Pattern p1 = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
	
	/**
	 * 缩略字符串(适应于与HTML标签的)
	 * @param param 目标字符串
	 * @param length 截取长度
	 * @return
	 */
	public static String htmlAbbr(String param, int length) {
		if (param == null) {
			return "";
		}
		StringBuffer result = new StringBuffer();
		int n = 0;
		char temp;
		boolean isCode = false; // 是不是HTML代码
		boolean isHTML = false; // 是不是HTML特殊字符,如&nbsp;
		for (int i = 0; i < param.length(); i++) {
			temp = param.charAt(i);
			if (temp == '<') {
				isCode = true;
			} else if (temp == '&') {
				isHTML = true;
			} else if (temp == '>' && isCode) {
				n = n - 1;
				isCode = false;
			} else if (temp == ';' && isHTML) {
				isHTML = false;
			}
			try {
				if (!isCode && !isHTML) {
					n += String.valueOf(temp).getBytes("GBK").length;
				}
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}

			if (n <= length - 3) {
				result.append(temp);
			} else {
				result.append("...");
				break;
			}
		}
		// 取出截取字符串中的HTML标记
		String tempResult = result.toString().replaceAll("(>)[^<>]*(<?)", "$1$2");
		// 去掉不需要结素标记的HTML标记
		tempResult = tempResult.replaceAll("</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|"
				+ "HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|"
				+ "basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|"
				+ "option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>", "");
		// 去掉成对的HTML标记
		tempResult = tempResult.replaceAll("<([a-zA-Z]+)[^<>]*>(.*?)</\\1>", "$2");
		// 用正则表达式取出标记
		Matcher m = p1.matcher(tempResult);
		List<String> endHTML = ListUtils.newArrayList();
		while (m.find()) {
			endHTML.add(m.group(1));
		}
		// 补全不成对的HTML标记
		for (int i = endHTML.size() - 1; i >= 0; i--) {
			result.append("</");
			result.append(endHTML.get(i));
			result.append(">");
		}
		return result.toString();
	}
	
	/**
	 * 首字母大写
	 */
	public static String cap(String str){
		return capitalize(str);
	}
	
	/**
	 * 首字母小写
	 */
	public static String uncap(String str){
		return uncapitalize(str);
	}
	
	/**
	 * 驼峰命名法工具
	 * @return
	 * 		camelCase("hello_world") == "helloWorld" 
	 * 		capCamelCase("hello_world") == "HelloWorld"
	 * 		uncamelCase("helloWorld") = "hello_world"
	 */
    public static String camelCase(String s) {
        if (s == null) {
            return null;
        }

        s = s.toLowerCase();

        StringBuilder sb = new StringBuilder(s.length());
        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (c == SEPARATOR) {
                upperCase = true;
            } else if (upperCase) {
                sb.append(Character.toUpperCase(c));
                upperCase = false;
            } else {
                sb.append(c);
            }
        }

        return sb.toString();
    }

    /**
	 * 驼峰命名法工具
	 * @return
	 * 		camelCase("hello_world") == "helloWorld" 
	 * 		capCamelCase("hello_world") == "HelloWorld"
	 * 		uncamelCase("helloWorld") = "hello_world"
	 */
    public static String capCamelCase(String s) {
        if (s == null) {
            return null;
        }
        s = camelCase(s);
        return s.substring(0, 1).toUpperCase() + s.substring(1);
    }
    
    /**
	 * 驼峰命名法工具
	 * @return
	 * 		camelCase("hello_world") == "helloWorld" 
	 * 		capCamelCase("hello_world") == "HelloWorld"
	 * 		uncamelCase("helloWorld") = "hello_world"
	 */
    public static String uncamelCase(String s) {
        if (s == null) {
            return null;
        }

        StringBuilder sb = new StringBuilder();
        boolean upperCase = false;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            boolean nextUpperCase = true;

            if (i < (s.length() - 1)) {
                nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
            }

            if ((i > 0) && Character.isUpperCase(c)) {
                if (!upperCase || !nextUpperCase) {
                    sb.append(SEPARATOR);
                }
                upperCase = true;
            } else {
                upperCase = false;
            }

            sb.append(Character.toLowerCase(c));
        }

        return sb.toString();
    }
    
    /**
     * 转换为JS获取对象值,生成三目运算返回结果
     * @param objectString 对象串
     *   例如:row.user.id
     *   返回:!row?'':!row.user?'':!row.user.id?'':row.user.id
     */
    public static String jsGetVal(String objectString){
    	StringBuilder result = new StringBuilder();
    	StringBuilder val = new StringBuilder();
    	String[] vals = split(objectString, ".");
    	for (int i=0; i<vals.length; i++){
    		val.append("." + vals[i]);
    		result.append("!"+(val.substring(1))+"?'':");
    	}
    	result.append(val.substring(1));
    	return result.toString();
    }

	/**
	 * 获取随机字符串
	 * @param count
	 * @return
	 */
	public static String getRandomStr(int count) {
		char[] codeSeq = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
				'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
				'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
		Random random = new Random();
		StringBuilder s = new StringBuilder();
		for (int i = 0; i < count; i++) {
			String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);
			s.append(r);
		}
		return s.toString();
	}

	/**
	 * 获取随机数字
	 * @param count
	 * @return
	 */
	public static String getRandomNum(int count) {
		char[] codeSeq = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
		Random random = new Random();
		StringBuilder s = new StringBuilder();
		for (int i = 0; i < count; i++) {
			String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);
			s.append(r);
		}
		return s.toString();
	}
	
	/**
	 * 获取树节点名字
	 * @param isShowCode 是否显示编码<br>
	 * 		true or 1:显示在左侧:(code)name<br>
	 * 		2:显示在右侧:name(code)<br>
	 * 		false or null:不显示编码:name
	 * @param code 编码
	 * @param name 名称
	 * @return 
	 */
	public static String getTreeNodeName(String isShowCode, String code, String name) {
		if ("true".equals(isShowCode) || "1".equals(isShowCode)) {
			return "(" + code + ") " + StringUtils.replace(name, " ", "");
		} else if ("2".equals(isShowCode)) {
			return StringUtils.replace(name, " ", "") + " (" + code + ")";
		} else {
			return StringUtils.replace(name, " ", "");
		}
	}
	
	
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java语言StringUtils工具类 的相关文章

随机推荐

  • 薪资12k,在银行外包做软件测试是一种什么体验...

    背景 本人普通二本本科毕业 4 年 目前是在广州工作 是一家大型的人力外包公司外包到银行的开发人员 这可能也是长期在各大招聘软件上最积极的招聘岗位 从入职到现在已经有四个月了 也大概了解了外包的主要工作情况 也有了一些心得体会 借此机会也简
  • 【解决】NullReferenceException: Object reference not set to an instance of an object

    游戏引擎 Unity 版本 2019 4 6f1 2017版本以上均可 编译平台 Visual Studio 2019 一 问题描述 描述 原 文 报错 NullReferenceException Object reference not
  • IT云运维技术分享

    1 运维体系 1 1 市场对运维的需求 时代发展到今天 社会的生活方式与生产方式的全面的数字化 无论是传统企业还是互联网企业 都在全面上云 这也意味着企业的关键业务乃至 身家性命 都已经全部放在 IT 系统之上 因此企业需要系统足够稳定可靠
  • python37-32_python37.dll文件 免费版

    python37 dll文件是一款非常重要的系统文件 你还在为python37 dll文件缺失出错而苦恼吗 小编推荐你使用这款软件 它可以帮助大家修复因为缺失python37 dll引起的一场和报错 只需要在本站下载压缩包解压后安装在指定文
  • 神经网络-Unet网络

    文章目录 前言 1 seq2seq 编码后解码 2 网络结构 3 特征融合 4 前言 Unet用来做小目标语义分割 优点 网络结构非常简单 大纲目录 2016年特别火 在细胞领域做分割特别好 1 seq2seq 编码后解码 2 网络结构 几
  • H - Hiking trip Gym - 103577H

    题目链接 题意 题意很简单就是模拟一个过程 但是模拟很复杂错了很多次 下面是AC代码 include
  • Unity脚本开发基础

    1 打开工程 Assets中新建文件夹Scripts 在文件夹中右键Create C 创建完毕 双击脚本 打开IDE 注意 类名和脚本名要是一样的 Start函数 在其中的内容会在一开始就被执行 所以一些需要初始化的变量写在其中 Updat
  • GitLab 与 SourceTree的结合使用

    这里写自定义目录标题 为公司分配的GitLab账号 重置密码 为GitLab添加公钥 第一步 创建ssh 第二部 为GitLab添加ssh 下载sourcetree 这里我们点击Bitbucket进行授权登陆 不登陆安装工具会很慢还有可能出
  • MySQL数据库的介绍

    数据库简介 数据库指的是长期存在计算机内 有组织 可共享 大量数据的集合 数据是按照特定的数据模型来组织 存储在数据库中 数据库的好处 1 持久化数据到本地 2 可以实现结构化查询 方便管理 数据库相关概念 DB database 数据库
  • 第二天(八)osg::Object* readObjectFile(const std::string& filename,const ReaderWriter::Options* options)

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • whatweb

    Whatweb介绍 Whatweb是一个基于Ruby语言的开源网站指纹识别软件 正如它的名字一样 whatweb能够识别各种关于网站的详细信息包括 CMS类型 博客平台 中间件 web框架模块 网站服务器 脚本类型 JavaScript库
  • flutter 创建插件遇到的两个问题,一:右键Flutter菜单不可用,二:可用后,iOS工程打开没有pods目录。

    今天研究flutter 插件 按照教程 通过android studio 创建 flutter 插件 创建完成后 点击工程右键 弹出菜单中Flutter 项目为灰色 不可用 升级flutter AndroidStudio都未解决 flutt
  • 人工智能数学基础--概率与统计10:离散随机变量的概率函数及常见的二项分布、泊松分布

    一 离散随机变量的概率函数及分布函数 设X为离散随机变量 其全部可能取值为 a1 a2 则 pi P X ai i 1 2 称为X的概率函数 也称为随机变量X的概率分布 设X为随机变量 包括离散和非离散 则函数 P X x F x lt x
  • Google Analytics 统计用户点击和每个页面浏览的用户id

  • python - write() argument must be str, not bytes

    python write argument must be str not bytes 源代码 import requests r requests get https www baidu com img bd logo1 png if r
  • 【满分】【华为OD机试真题2023B卷 JS】计算误码率

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 计算误码率 知识点双指针 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中
  • Python进阶语法(一)

    目录 一 Python列表推导式 1 1 使用方法 1 2 列表推导式优点 1 2 1 提升效率 1 2 2 方便转换数据 1 2 3 用于过滤数据 1 3 推广延申 1 3 1 字典推导式 1 3 2 元组推导式 1 3 3 集合推导式
  • Phpstorm好用插件

    IDE Eval Reset 无限次免费刷新30天试用期 插件市场安装 在Settings Preferences gt Plugins 内手动添加第三方插件仓库地址 https plugins zhile io 搜索 IDE Eval R
  • Mybatis 向MySql数据库插入带有日期类型字段的数据

    未验证 我们的实体类里面一个字段的日期类型是util Date 在向数据库插入该实体时会报错 说是 日期哪个字段 Data truncation 所以需要做些更改 在mybatis的MAPPER映射文件中对插入的日期进行相应属性的设置
  • java语言StringUtils工具类

    import com mls util tool codec EncodeUtils import com mls util tool collect ListUtils import org apache commons lang3 St