Java 模式错误:悬挂元字符
我想构建一个模式,在整数中插入逗号,使其看起来更漂亮,如Java 模式错误:悬挂元字符,java,regex,Java,Regex,我想构建一个模式,在整数中插入逗号,使其看起来更漂亮,如1234556,在操作后,它将类似于1234556,因此我使用以下代码: public static void insertCommaFormly(int n) { String input = String.valueOf(n); String regex = "(?<=\\d)(?=(?:\\d{3},?)+$)"; /*or we can use negative look
1234556
,在操作后,它将类似于1234556
,因此我使用以下代码:
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());
}
但是如果我使用
(?为什么不使用现成的DecimalFormat类,它将为您插入逗号?请参阅
“悬空元字符”错误是因为“+”在正则表达式中具有特殊含义(前一个字符的一个或多个实例),如果删除第二个“+”,它应该是有效的。可以使用DecimalFormat
类:
int i = 1234556;
DecimalFormat df = new DecimalFormat("###,###");
String result = df.format(i);
System.out.println(result);
在\d{3}++
中,{3}
是一个量词,意思正好是三个,第一个+
使量词具有所有格,这在语法上是有效的,但毫无意义。但是第二个+
毫无意义;它既不能用作量词,也不能用作所有格修饰语,这就是为什么你会得到这个例外
您要做的是匹配一个后跟一些数字的位置,其中数字的数量是三的倍数——或者,用正则表达式表示,一组或多组三位数:
如果愿意,可以添加第二个+
,使其具有所有格-(?=(?:\d{3})+
-但它不会改变结果,也不会对性能产生明显影响。顺便说一句,您不必为此作业使用appendReplacement()
和appendTail()
:
return String.valueOf(n).replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");
return String.valueOf(n).replaceAll(“(?我只是想了解更多关于模式的信息,而不仅仅是这个函数!是的,我详细地研究了jdk,它如您所说进行了描述!谢谢。
int i = 1234556;
DecimalFormat df = new DecimalFormat("###,###");
String result = df.format(i);
System.out.println(result);
(?=(?:\d{3})+)
return String.valueOf(n).replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",");