【问题标题】:Algorithm to adding specific characters to specific places in a string将特定字符添加到字符串中特定位置的算法
【发布时间】:2018-10-03 19:03:46
【问题描述】:

例如我有字符串:61109010140000071219812874,我想应用算法,它将通过以下方式转换字符串:

611 09-010-14-000-00-712-19-812-87-4

如您所见,重点是选择字符串的前三个字母,然后添加一个空格,然后在两个字符后添加两个破折号,然后是三个,然后是两个字符。就像是: ### ##-###-##-###-##-###-##-###

只有我希望我的算法是通用的。例如,对于字符串6110901,输出为:611 09-01,对于字符串61109010,输出为:611 09-010

我尝试使用 StringBuilder 和 addCharAt 方法,但不幸的是它覆盖了我的字符串。

【问题讨论】:

  • 如果您发布您尝试过的实际代码,有人可能会指出其中的错误。如果您不发布,我们就不太可能发布。
  • str.replaceAll("(...)(..)(...)(..)(...)(..)(...)(..)(...)(..)(.)", "$1 $2-$3-$4-$5-$6-$7-$8-$9-$10-$11")
  • 或更严格地说:str = str.replaceAll("^(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d)$", "$1 $2-$3-$4-$5-$6-$7-$8-$9-$10-$11"); --- 见DEMO

标签: java string algorithm


【解决方案1】:

cmets 中的上述答案有效,但如果你想要一个常规循环来构建你想要的东西,这应该可以解决问题:

    public static void main(String args[]) {

    String str = "61109010140000071219812874";
    String output = "";
    int segment = 2;

    for(int i = 0; i < str.length(); i += segment){

        segment = segment == 3 ? 2 : 3;
        String seg = str.substring(i, Math.min(i + segment, str.length()));
        char next = i == 0 ? ' ' : '-';
        seg += next;
        output += seg;            
    }

    output = output.substring(0, output.length() - 1);
    System.out.println(output);   //611 09-010-14-000-00-712-19-812-87-4

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 2020-02-26
    • 2017-09-01
    • 2020-08-15
    • 1970-01-01
    • 2018-07-27
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多