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

如何在Java中将48a493d902b5转换为48:a4:93:d9:02:b5?能否用正则实现?

可以用正则实现,且方案更简洁

当然可以用正则表达式完成这个转换,相比while循环,正则写法更简洁直观,不需要手动处理索引和循环逻辑。

核心思路

匹配字符串中每两个连续的字符,在其后添加冒号,但避免在最后一组字符后加冒号。以下是几种常见编程语言的实现示例:

Python 实现

import re
original_str = "48a493d902b5"
formatted_str = re.sub(r'(..)(?!$)', r'\1:', original_str)
print(formatted_str)  # 输出: 48:a4:93:d9:02:b5
  • 正则说明:
    • (..):捕获任意两个连续字符作为分组1
    • (?!$):负向预查,确保当前匹配的位置不是字符串末尾
    • \1::将匹配到的分组内容替换为「分组1内容+冒号」

如果觉得负向预查不好理解,也可以先给所有双字符加冒号,再去掉末尾多余的冒号:

formatted_str = re.sub(r'(..)', r'\1:', original_str).rstrip(':')

JavaScript 实现

const originalStr = "48a493d902b5";
const formattedStr = originalStr.replace(/(..)(?!$)/g, "$1:");
console.log(formattedStr); // 输出: 48:a4:93:d9:02:b5
  • 注意要加g修饰符,开启全局匹配,否则只会替换第一组双字符。

为什么正则更优?

  • 代码行数更少,逻辑一目了然
  • 无需手动管理循环索引、计数变量,减少人为出错的可能
  • 对于这种固定格式的字符串转换,正则的执行效率和循环相当,甚至在某些引擎下表现更好

内容的提问来源于stack exchange,提问作者Alessandro Nunes Bertoni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:27:16