Java中 String工具类

简介: Java中 String工具类

public class StringUtil {

/**
 * 判断字符串是否   不为NotEmpty(!null或空值)
 *
 * @param param 待检查对象
 * @return boolean 返回的布尔值
 */
public static boolean isNotNullEmpty(String param) {
    return !isNullOrEmpty(param);
}

/**
 * 判断字符串是否为   NotEmpty(!null或空值)
 *
 * @param param
 * @return
 */
public static boolean isNullOrEmpty(String param) {
    if (StringUtils.isEmpty(param)) {
        return true;
    }
    return StringUtils.isBlank(param);
}

/**
 * 字符串长度
 * 中文2个字符,英文1个字符
 *
 * @param value
 * @return
 */
public static int length(String value) {
    int valueLength = 0;
    String chinese = "[\u4e00-\u9fa5]";
    for (int i = 0, j = value.length(); i < j; i++) {
        String temp = value.substring(i, i + 1);
        if (temp.matches(chinese)) {
            valueLength += 2;
        } else {
            valueLength += 1;
        }
    }
    return valueLength;
}

/**
 * 字符串截取
 *
 * @param str
 * @param start  开始
 * @param length 长度
 * @return
 */
public static final String substr(String str, Integer start, Integer length) {
    if (length > 0) {
        return str.substring(start, length);
    }
    return str.substring(start);
}

private static Pattern replaceBlank = Pattern.compile("\\s*|\t|\r|\n");

/**
 * 去除所有空格,制表,换行
 *
 * @param str
 * @return
 */
public static String replaceBlank(String str) {
    String dest = "";
    if (str != null) {
        Matcher m = replaceBlank.matcher(str);
        dest = m.replaceAll("");
    }
    return dest;
}

/**
 * 特殊字符
 */
private static String patternEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?_]";

/**
 * 判断特殊字符
 * https://blog.csdn.net/you23hai45/article/details/20163459
 *
 * @param str
 * @return
 * @throws PatternSyntaxException
 * @Title : FilterStr
 * @Type : FilterString
 * @Description : 判断特殊字符
 */
public static String filterStr(String str) throws PatternSyntaxException {
    Pattern pat = Pattern.compile(patternEx);
    Matcher mat = pat.matcher(str);

    /**
     * 返回替换结果
     */
    return mat.replaceAll("").trim();
}

/**
 * 判断 String[] 是否为null
 *
 * @param str
 * @return
 */
public static boolean isArrNotNull(String[] str) {
    return str != null && str.length > 0;
}

public static String toString(Object obj) {
    return toString(obj, "");
}

public static String toString(Object obj, String defaults) {
    String s = String.valueOf(obj);
    if ("null".equals(s)) {
        return defaults;
    }
    return s;
}

public static String toString(char obj[]) {
    return String.valueOf(obj);
}

public static String toString(boolean obj) {
    return String.valueOf(obj);
}

public static String toString(char obj) {
    return String.valueOf(obj);
}

public static String toString(int obj) {
    return String.valueOf(obj);
}

public static String toString(long obj) {
    return String.valueOf(obj);
}

public static String toString(float obj) {
    return String.valueOf(obj);
}

public static String toString(double obj) {
    return String.valueOf(obj);
}

public static String toString(Long obj) {
    return toString(obj, "0");
}

public static String toString(Long obj, String defaults) {
    if (NumberUtil.isLongNull(obj)) {
        return defaults;
    }
    return String.valueOf(obj);
}

public static String toString(Integer obj) {
    return toString(obj, "0");
}

public static String toString(Integer obj, String defaults) {
    if (NumberUtil.isIntegerNull(obj)) {
        return defaults;
    }
    return String.valueOf(obj);
}

public static String toString(Float obj) {
    return toString(obj, "0");
}

public static String toString(Float obj, String defaults) {
    if (NumberUtil.isFloatNull(obj)) {
        return defaults;
    }
    return String.valueOf(obj);
}

public static String toString(Double obj) {
    return toString(obj, "0");
}

public static String toString(Double obj, String defaults) {
    if (NumberUtil.isDoubleNull(obj)) {
        return defaults;
    }
    return String.valueOf(obj);
}

public static String toString(BigDecimal obj) {
    return toString(obj, "0");
}

public static String toString(BigDecimal obj, String defaults) {
    if (!BigDecimalUtil.isNotNull(obj)) {
        return defaults;
    }
    return String.valueOf(obj);
}

public static String toString(String obj) {
    return toString(obj, "");
}

public static String toString(String obj, String defaults) {
    if (isNullOrEmpty(obj)) {
        return "";
    }
    return obj;
}

private static final char[] DEFAULT_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final char[] NUMBER_ALPHABET = "0123456789".toCharArray();

/**
 * 随机数
 *
 * @param size 长度
 * @return
 */
public static String randomNanoId(int size) {
    return NanoId.randomNanoId(null, DEFAULT_ALPHABET, size);
}

/**
 * 随机数 32位
 *
 * @return
 */
public static String randomNanoId() {
    return NanoId.randomNanoId(null, DEFAULT_ALPHABET, 32);
}

/**
 * 随机数
 *
 * @param size 长度
 * @return
 */
public static String randomNumber(int size) {
    return NanoId.randomNanoId(null, NUMBER_ALPHABET, size);
}

/**
 * 拆分 逗号 数组,并去重
 *
 * @param str
 * @return
 */
public static Optional<List<String>> toList(String str) {
    return toList(str, ",");
}

/**
 * 拆分 逗号 数组,并去重
 *
 * @param str
 * @return
 */
public static Optional<List<String>> toList(String str, String separator) {
    String s = StringUtils.trimToEmpty(str);
    if (StringUtils.isBlank(s)) {
        return Optional.empty();
    }

// if (!StringUtils.contains(s, ",")) {
// return Optional.ofNullable(Lists.newArrayList(s));
// }

    List<String> strings = Splitter.on(separator).trimResults().omitEmptyStrings().splitToList(str);
    if (null == strings || strings.size() <= 0) {
        return Optional.empty();
    }
    return Optional.ofNullable(strings.stream().distinct().collect(Collectors.toList()));
}

/**
 * 解析后,用 , 号分割,拼接(连接)成 字符串,并跳过 null 值
 *
 * @param list
 * @return
 */
public static String parse(List<String> list) {
    return parse(list, ",");
}

/**
 * 解析后,用 指定 符号分割,拼接(连接)成 字符串,并跳过 null 值
 *
 * @param list
 * @return
 */
public static String parse(List<String> list, String separator) {
    return Joiner.on(separator).skipNulls().join(list);
}

/**
 * 是否为 null 或者 空字符
 *
 * @param param
 * @return
 */
public static boolean isBlank(String param) {
    return StringUtils.isBlank(param);
}

/**
 * 不为 null 或者 空字符
 *
 * @param param
 * @return
 */
public static boolean isNotBlank(String param) {
    return StringUtils.isNotBlank(param);
}

/**
 * 解析并填充
 *
 * @param source , 号 隔开的,字符串
 * @param map
 * @return
 */
public static String parseToFill(String source, Map<String, String> map) {

    return StringUtil.parseToFill(source,map,",");
}

/**
 * 解析并填充
 *
 * @param source , 号 隔开的,字符串
 * @param map
 * @return
 */
public static String parseToFill(String source, Map<String, String> map, String separator) {
    if (StringUtils.isBlank(source)) {
        return "";
    }
    if (map.isEmpty()) {
        return "";
    }
    Optional<List<String>> strings = toList(source,separator);
    if (strings.isPresent()) {
        StringBuffer sb = new StringBuffer();
        int i = 0;
        for (String str : strings.get()) {
            if (map.containsKey(str)) {
                if (i > 0) {
                    sb.append(",");
                }
                sb.append(map.get(str));
                i++;
            }
        }
        if(StringUtils.isEmpty(sb.toString())){
            return "";
        }
        if(",".equals( sb.toString().substring(sb.toString().length() - 1))){
            return org.springframework.util.StringUtils.isEmpty(sb.toString()) ? null : (sb.toString().substring(0, sb.toString().length() - 1));
        }else {
            return sb.toString();
        }

    }
    return "";
}

/**
 * 格式化文本, {} 表示占位符 此方法只是简单将占位符 {} 按照顺序替换为参数 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可 例:
 * 通常使用:format("this is {} for {}", "a", "b") =》 this is a for b 转义{}
 * : format("this is \\{} for {}", "a", "b") =》 this is \{} for a 转义\
 * : format("this is \\\\{} for {}", "a", "b") =》 this is \a for b
 *
 * @param template – 文本模板,被替换的部分用 {} 表示,如果模板为null,返回"null"
 * @param params   – 参数值
 * @return 格式化后的文本,如果模板为null,返回"null"
 */
public static String format(CharSequence template, Object... params) {
    return StrUtil.format(template, params);
}

public static String trim(String str) {
    return StringUtils.trimToEmpty(str);
}

}

相关文章
|
2月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
316 5
|
4月前
|
存储 SQL 缓存
Java字符串处理:String、StringBuilder与StringBuffer
本文深入解析Java中String、StringBuilder和StringBuffer的核心区别与使用场景。涵盖字符串不可变性、常量池、intern方法、可变字符串构建器的扩容机制及线程安全实现。通过性能测试对比三者差异,并提供最佳实践与高频面试问题解析,助你掌握Java字符串处理精髓。
|
5月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
361 14
|
9月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
267 11
|
9月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
292 9
|
9月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
304 0
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
328 65
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
188 2
Java 中的 String Pool 简介
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
314 1
java 为什么 String 在 java 中是不可变的?