gpt4 book ai didi

java - 模式错误 : Dangling meta character

转载 作者:行者123 更新时间:2023-11-30 04:43:49 24 4
gpt4 key购买 nike

我想构建一个模式来将逗号插入整数以使其看起来不错,例如 1234556 ,操作后,就会像 1,234,556 ,所以我使用以下代码:

public static void insertCommaFormly(int n)
{
String input = String.valueOf(n);
String regex = "(?<=\\d)(?=(?:\\d{3},?)+$)";
/*or we can use negative look-around*/
regex = "(?<=\\d)(?=\\d{3}++\\b)";
String replacement = ",";
StringBuffer buffer = new StringBuffer();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

logger.info("Target string is :" + input );
logger.info("Use regex :" + regex);

while(matcher.find())
{
matcher.appendReplacement(buffer, replacement);
logger.info(String.format("Part : '%s'", buffer));
}
matcher.appendTail(buffer);

logger.info("After replace , the string is like : " + buffer.toString());
}

但是,它给了我一个错误(I don't know the reason!):

Dangling meta character '+' near index 16
(?<=\d)(?=\d{2}++\b)
^

但是如果我使用(?<=\\d)(?=\\d{3}+\\b) ,编译器不会给我提示,但是,它给了我错误的结果 1234,556 (I don't know why results in this ?),如果我使用(?<=\\d)(?=(?:\\d{3})+\\b) ,那么这就是正确的结果。

  So here are my two questions , please help me with these , thanks in advance!

最佳答案

\d{3}++ 中,{3} 是一个量词,正好表示三,第一个 + 使得量词所有格,在语法上是有效的,但毫无意义。但第二个 + 根本没有意义;它不能用作量词或所有格修饰符,这就是您收到该异常的原因。

您想要做的是匹配一个后跟一些数字的位置,其中数字的数量是三的倍数 - 或者,用可以表示为正则表达式的术语,一个或更多三位数组:

(?=(?:\d{3})+)

如果您愿意,您可以添加第二个 + 使其具有所有格 - (?=(?:\d{3})++) - 但它赢了不会改变结果,也不会对性能产生明显影响。顺便说一句,您实际上不必使用 appendReplacement()appendTail() 来完成这项工作:

return String.valueOf(n).replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");

...工作得很好。

关于java - 模式错误 : Dangling meta character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11600931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com