String工具类
问题描述
很多时候我们需要对字符串进行很多固定的操作,而这些操作在JDK/JRE中又没有预置,于是我们想到了apache-commons组件,但是它也不能完全覆盖我们的业务需求,所以很多时候还是要自己写点代码的,下面就是基于apache-commons组件写的部分常用方法:
MAVEN依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
代码成果
package com.hykj.util;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Locale;
/**
* 字符串工具类
*
* @author weizj
*/
public class StringUtils extends org.apache.commons.lang3.StringUtils {
/** 值为"NULL"的字符串 */
private static final String NULL_STRING = "NULL";
private static final char SEPARATOR = '_';
/**
* 满足一下情况返回true<br/>
* ①.入参为空
* ②.入参为空字符串
* ③.入参为"null"字符串
*
* @param string 需要判断的字符型
* @return boolean
*/
public static boolean isNullOrEmptyOrNULLString(String string) {
return isBlank(string) || NULL_STRING.equalsIgnoreCase(string);
}
/**
* 把字符串转为二进制码<br/>
* 本方法不会返回null
*
* @param str 需要转换的字符串
* @return 二进制字节码数组
*/
public static byte[] toBytes(String str) {
return isBlank(str) ? new byte[]{} : str.getBytes();
}
/**
* 把字符串转为二进制码<br/>
* 本方法不会返回null
*
* @param str 需要转换的字符串
* @param charset 编码类型
* @return 二进制字节码数组
* @throws UnsupportedEncodingException 字符串转换的时候编码不支持时出现
*/
public static byte[] toBytes(String str, Charset charset) throws UnsupportedEncodingException {
return isBlank(str) ? new byte[]{} : str.getBytes(charset.displayName());
}
/**
* 把字符串转为二进制码<br/>
* 本方法不会返回null
*
* @param str 需要转换的字符串
* @param charset 编码类型
* @param locale 编码类型对应的地区
* @return 二进制字节码数组
* @throws UnsupportedEncodingException 字符串转换的时候编码不支持时出现
*/
public static byte[] toBytes(String str, Charset charset, Locale locale) throws UnsupportedEncodingException {
return isBlank(str) ? new byte[]{} : str.getBytes(charset.displayName(locale));
}
/**
* 二进制码转字符串<br/>
* 本方法不会返回null
*
* @param bytes 二进制码
* @return 字符串
*/
public static String bytesToString(byte[] bytes) {
return bytes == null || bytes.length == 0 ? EMPTY : new String(bytes);
}
/**
* 二进制码转字符串<br/>
* 本方法不会返回null
*
* @param bytes 二进制码
* @param charset 编码集
* @return 字符串
* @throws UnsupportedEncodingException 当前二进制码可能不支持传入的编码
*/
public static String byteToString(byte[] bytes, Charset charset) throws UnsupportedEncodingException {
return bytes == null || bytes.length == 0 ? EMPTY : new String(bytes, charset.displayName());
}
/**
* 二进制码转字符串<br/>
* 本方法不会返回null
*
* @param bytes 二进制码
* @param charset 编码集
* @param locale 本地化
* @return 字符串
* @throws UnsupportedEncodingException 当前二进制码可能不支持传入的编码
*/
public static String byteToString(byte[] bytes, Charset charset, Locale locale) throws UnsupportedEncodingException {
return bytes == null || bytes.length == 0 ? EMPTY : new String(bytes, charset.displayName(locale));
}
/**
* 把对象转为字符串
*
* @param object 需要转化的字符串
* @return 字符串, 可能为空
*/
public static String parseString(Object object) {
if (object == null) {
return null;
}
if (object instanceof byte[]) {
return bytesToString((byte[]) object);
}
return object.toString();
}
/**
* 把字符串转为int类型
*
* @param str 需要转化的字符串
* @return int
* @throws NumberFormatException 字符串格式不正确时抛出
*/
public static int parseInt(String str) throws NumberFormatException {
return isBlank(str) ? 0 : Integer.parseInt(str);
}
/**
* 把字符串转为double类型
*
* @param str 需要转化的字符串
* @return double
* @throws NumberFormatException 字符串格式不正确时抛出
*/
public static double parseDouble(String str) throws NumberFormatException {
return isBlank(str) ? 0D : Double.parseDouble(str);
}
/**
* 把字符串转为long类型
*
* @param str 需要转化的字符串
* @return long
* @throws NumberFormatException 字符串格式不正确时抛出
*/
public static long parseLong(String str) throws NumberFormatException {
return isBlank(str) ? 0L : Long.parseLong(str);
}
/**
* 把字符串转为float类型
*
* @param str 需要转化的字符串
* @return float
* @throws NumberFormatException 字符串格式不正确时抛出
*/
public static float parseFloat(String str) throws NumberFormatException {
return isBlank(str) ? 0L : Float.parseFloat(str);
}
/**
* 获取i18n字符串
*
* @param code
* @param args
* @return
*/
public static String getI18NMessage(String code, Object[] args) {
//LocaleResolver localLocaleResolver = (LocaleResolver) SpringContextHolder.getBean(LocaleResolver.class);
//HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
//Locale locale = localLocaleResolver.resolveLocale(request);
//return SpringContextHolder.getApplicationContext().getMessage(code, args, locale);
return "";
}
/**
* 获得用户远程地址
*
* @param request 请求头
* @return 用户ip
*/
public static String getRemoteAddr(HttpServletRequest request) {
String remoteAddr = request.getHeader("X-Real-IP");
if (isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("X-Forwarded-For");
} else if (isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("Proxy-Client-IP");
} else if (isNotBlank(remoteAddr)) {
remoteAddr = request.getHeader("WL-Proxy-Client-IP");
}
return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
}
/**
* 驼峰命名法工具
*
* @return toCamelCase(" hello_world ") == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toCamelCase(String s, Locale locale, char split) {
if (isBlank(s)) {
return "";
}
s = s.toLowerCase(locale);
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
sb.append(c == split ? Character.toUpperCase(c) : c);
}
return sb.toString();
}
public static String toCamelCase(String s) {
return toCamelCase(s, Locale.getDefault(), SEPARATOR);
}
public static String toCamelCase(String s, Locale locale) {
return toCamelCase(s, locale, SEPARATOR);
}
public static String toCamelCase(String s, char split) {
return toCamelCase(s, Locale.getDefault(), split);
}
public static String toUnderScoreCase(String s, char split) {
if (isBlank(s)) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
boolean nextUpperCase = (i < (s.length() - 1)) && Character.isUpperCase(s.charAt(i + 1));
boolean upperCase = (i > 0) && Character.isUpperCase(c);
sb.append((!upperCase || !nextUpperCase) ? split : "").append(Character.toLowerCase(c));
}
return sb.toString();
}
public static String toUnderScoreCase(String s) {
return toUnderScoreCase(s, SEPARATOR);
}
/**
* 把字符串转换为JS获取对象值的三目运算表达式
*
* @param objectString 对象串
* 例如:入参:row.user.id/返回:!row?'':!row.user?'':!row.user.id?'':row.user.id
*/
public static String toJsGetValueExpression(String objectString) {
StringBuilder result = new StringBuilder();
StringBuilder val = new StringBuilder();
String[] fileds = split(objectString, ".");
for (int i = 0; i < fileds.length; i++) {
val.append("." + fileds[i]);
result.append("!" + (val.substring(1)) + "?'':");
}
result.append(val.substring(1));
return result.toString();
}
}
String工具类的更多相关文章
- 实用的 集合工具类 和 String工具类
集合工具类:CollectionUtil method: 1.isNotEmpty() 不为空 2.isEmpty() 为空 举例:map集合 Map<String,String ...
- [分享]一个String工具类,也许你的项目中会用得到
每次做项目都会遇到字符串的处理,每次都会去写一个StringUtil,完成一些功能. 但其实每次要的功能都差不多: 1.判断类(包括NULL和空串.是否是空白字符串等) 2.默认值 3.去空白(tri ...
- JAVA String 工具类
java StringUtil 字符串工具类 import java.util.ArrayList; import java.util.LinkedHashSet; import java.util. ...
- String工具类2
1:比较字符串 public static void main(String[] args) { // String去创建对象有多种方式 // 方式1 直接字面值赋值 String s = " ...
- 优雅的将Map转为String工具类
import com.alibaba.fastjson.JSONObject;import org.apache.commons.lang3.StringUtils; import java.lang ...
- String 工具类
package com.mytripod.util; import sun.rmi.runtime.Log; import java.io.UnsupportedEncodingException; ...
- String工具类之“四个判空方式”StringUtils.isNotBlank和StringUtils.isEmpty和StringUtils.isBlank和StringUtils.isNotEmpty
一.判断str字符串都不为空==>StringUtils.isNotBlank(String str); 1 /** 2 * <p>检查一个字符串是否非空("") ...
- String工具类之“前缀比较”StringUtils.startsWith和StringUtils.startsWithIgnoreCase
(1)字符串以prefix为前缀(区分大小写) StringUtils.startsWith(被比较的字符串,比较字符串) 总结: 根据下面代码发现,上面的例子有部分时错误的,有可能是因为思维原因,他 ...
- java工具类
1.HttpUtilsHttp网络工具类,主要包括httpGet.httpPost以及http参数相关方法,以httpGet为例:static HttpResponse httpGet(HttpReq ...
随机推荐
- 解决easyUI中翻页后前面已钩选项自动变为未选择的问题
在easyUI的datagrid中,必须在属性的第一条就要写 idField:'id' (只要创建数据表格,就必须要加idField),其中id是页面数据的主键名称. 这样设置之后,表格翻页之后,前面 ...
- elasticsearch批量修改,批量更新某个字段
1.源生API 在这里没有用官方提供的bulk API,而是用的另外一种方式. POST /infomations/infomations/_update_by_query JSON请求格式 { &q ...
- JS高级总结
网址:https://www.cnblogs.com/signheart/p/d6c229a5a758ee1dc21ad5ca2042ab8f.html 通常,通过 JavaScript,您需要操作 ...
- pytest学习--快速入门
一.pytest简介 Pytest是python的一种单元测试框架. pytest的特点: 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试框架(no ...
- Numpy一文全了解
1,Numpy是一个python包,它是一个由多维数组对象和处理数组的例程集合组成的库. 2. Numpy的操作:(1)数组的算数和逻辑运算 :(2)傅里叶变换和用于图形操作 (3)与线性代数有 ...
- S19 文件详解
http://blog.csdn.net/finewind/article/details/5483554
- python 多进程/多线程/协程 同步异步
这篇主要是对概念的理解: 1.异步和多线程区别:二者不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段.异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事 ...
- 19-06 【phpunit和docker】
phpunit简介 在用PHP做项目的时候,有时候我们需要写一些测试代码,其中可能包含单元测试(比如字符串处理,ip解析,mobile解析等). 我们常用的工具是phpunit,它很方便地帮我们组织测 ...
- CRM--自定义stark
一:启动 解释django的启动 完成以上两步,在app01下创建stark.py文件,就会被加载 (admin.py就是这样启动的) 二:注册 三:设计urls 四:增删改查
- gk888t打印机安装
https://jingyan.baidu.com/article/948f5924090c7ad80ff5f9c5.html