You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 11中如何高效实现符合规则的字符串连字符插入转换

Java 11中如何高效实现符合规则的字符串连字符插入转换

嘿,这个需求挺有意思的!你已经搞定了关键的输入验证环节,接下来的连字符插入其实有两种高效的实现方式,我给你详细拆解下:

方式一:用正则表达式快速替换(最简洁)

Java的String.replaceAll方法配合精心编写的正则,可以一行代码搞定插入逻辑,而且底层是JDK优化过的正则引擎,效率完全够用。

核心思路是匹配需要插入连字符的边界位置,这些位置满足以下任意一种情况:

  • 小写字母紧跟大写字母(或反之,大小写切换)
  • 字母紧跟数字(或反之,类型切换)

对应的正则表达式如下:

String hyphenRegex = "(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[a-z])|(?<=[a-zA-Z])(?=[0-9])|(?<=[0-9])(?=[a-zA-Z])";

把它整合到你的方法里,完整代码如下:

public String hyphenate(String input) {
    // 输入验证:确保只包含字母数字
    if (!input.matches("[a-zA-Z0-9]+")) {
        throw new IllegalArgumentException("Illegal! $ not allowed!");
    }

    // 匹配需要插入连字符的边界,替换为"-"
    String hyphenRegex = "(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[a-z])|(?<=[a-zA-Z])(?=[0-9])|(?<=[0-9])(?=[a-zA-Z])";
    return input.replaceAll(hyphenRegex, "-");
}

测试你给出的案例:

  • flimFlam → flim-Flam
  • fliMflam → fliM-flam
  • fliM8fLam → fli-M-8-f-Lam
    完全符合预期!

方式二:手动遍历字符构建(直观可控)

如果你觉得正则不够直观,或者需要处理超大字符串(正则引擎有微小的额外开销),可以用StringBuilder手动遍历字符,逐个判断是否需要插入连字符:

public String hyphenate(String input) {
    // 输入验证
    if (!input.matches("[a-zA-Z0-9]+")) {
        throw new IllegalArgumentException("Illegal! $ not allowed!");
    }

    if (input.length() <= 1) {
        return input; // 单个字符无需处理
    }

    StringBuilder sb = new StringBuilder();
    char prevChar = input.charAt(0);
    sb.append(prevChar);

    for (int i = 1; i < input.length(); i++) {
        char currChar = input.charAt(i);
        // 判断是否大小写切换:用异或,一个小写一个大写时为true
        boolean caseChanged = Character.isLowerCase(prevChar) ^ Character.isUpperCase(currChar);
        // 判断是否类型切换:一个字母一个数字时为true
        boolean typeChanged = Character.isLetter(prevChar) ^ Character.isDigit(currChar);

        if (caseChanged || typeChanged) {
            sb.append('-');
        }
        sb.append(currChar);
        prevChar = currChar;
    }

    return sb.toString();
}

这种方式逻辑清晰,每一步都可控,性能也很出色,适合对底层细节有要求的场景。

两种方式对比

  • 正则方式:代码极简,可读性依赖正则功底,适合大多数常规场景
  • 手动遍历:代码稍长,但逻辑直观,性能略优(差异极小,除非处理百万级长度的字符串)

你可以根据自己的代码风格和业务场景选择~

备注:内容来源于stack exchange,提问作者hotmeatballsoup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:19:09