Java 在字符串中每两个字符后插入冒号(:)的方法是什么?

Java 在字符串中每两个字符后插入冒号(:)的方法是什么?,java,string,split,Java,String,Split,我正试图弄明白这一点- 输入:String data=“506313B5EA3E” 输出:String data=“50:63:13:B5:EA:3E” 我试着用- java.util.Arrays.toString(data.split("(?<=\\G..)")) java.util.Arrays.toString(data.split((?两个涉及循环的简单选项),都假设您已检查输入是否为非空且字符数为偶数: 使用StringBuilder StringBuilder builde

我正试图弄明白这一点-

输入:
String data=“506313B5EA3E”

输出:
String data=“50:63:13:B5:EA:3E”

我试着用-

java.util.Arrays.toString(data.split("(?<=\\G..)"))

java.util.Arrays.toString(data.split((?两个涉及循环的简单选项),都假设您已检查输入是否为非空且字符数为偶数:

使用StringBuilder

StringBuilder builder = new StringBuilder(data.length() * 3 / 2 - 1);
for (int i = 0; i < data.length(); i += 2) {
    if (i != 0) {
        builder.append(":");
    }
    builder.append(data.substring(i, i + 2));
}
String text = builder.toString();
您可以使用RegExp:

String input = "0123456789abcdef";
String output = input.replaceAll("..(?!$)", "$0:")
// output = "01:23:45:67:89:ab:cd:ef"
它是如何工作的

  • 正好匹配两个字符。
    (?!$)
    确保这两个字符不在
    输入的末尾。
    ?!
    为负前瞻,
    $
    代表结尾)
  • 匹配的两个字符现在将替换为它们自己(
    $0
    表示整个匹配字符串)和我们想要的冒号
  • 由于我们使用的是
    replaceALL
    ,因此此操作会对每两个字符组重复一次。请记住:除了最后一个字符组

你可以通过在字符串上循环的老式方法来完成。你能为你的正则表达式添加一个解释吗?
String text = Joiner.on(':').join(data.split("(?<=\\G..)"));
String input = "0123456789abcdef";
String output = input.replaceAll("..(?!$)", "$0:")
// output = "01:23:45:67:89:ab:cd:ef"