Java的String ReplaceAll替换字符串前面而不是结尾的溢出。

时间:2018-10-31 16:56:55

标签: java

我想用破折号输入一个字符串。破折号内有几组字符。该字符数由整数K指定。我将破折号开始,所以我有一个干净的String,然后使用

replaceAll("(.{" + K + "})", "$0-")

要插入一个-每K个字符。我想要“溢出”(将所有先前字符分组后的剩余字符都放在字符串的开头而不是结尾)。

例如,我有一个包含8个字符的字符串:

String s = "1-23456-78";
String newS = s.replace("-", "");

新闻现在是12345678

int K = 3; 
String newNewS = newS.replaceAll("(.{" + K + "})", "$0-").trim();

newNewS是123-456-78

我希望它是12-345-678。无论如何要反转replaceAll方法,还是有另一种方法?

2 个答案:

答案 0 :(得分:4)

我能想到的一种简单方法是,您反转字符串,然后应用正则表达式,然后再次反转?检查此代码。

public static void main(String args[]) {
    String s = "1-23456-78";
    String newS = s.replace("-", "");
    System.out.println(newS);
    int K = 3;
    newS = new StringBuilder(newS).reverse().toString();
    String newNewS = newS.replaceAll("(.{" + K + "})", "$0-").trim();
    System.out.println(new StringBuilder(newNewS).reverse().toString());
}

让我知道这听起来是否很好。

答案 1 :(得分:2)

您可以先行(demo):

.{3}(?=(?:.{3})*$)

替换为:

-$0

在您的情况下:

"12345678".replaceAll(".{" + K + "}(?=(?:.{" + K + "})*$)", "-$0")