Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式数_Java_Regex - Fatal编程技术网

Java 正则表达式数

Java 正则表达式数,java,regex,Java,Regex,我的目标是将下一个数字0112222222格式化为这个011-22-22-22 数字、破折号的前三个数字,以及第二个数字后带破折号的所有后续数字。已尝试: private String phoneFormat(String phoneNumber){ String regex = "\\B(?=(\\d{3})+(?!\\d))"; String formattedPhone = phoneNumber.replaceAll(regex, Constants.Characters

我的目标是将下一个数字
0112222222
格式化为这个
011-22-22-22
数字、破折号的前三个数字,以及第二个数字后带破折号的所有后续数字。已尝试:

private String phoneFormat(String phoneNumber){
    String regex = "\\B(?=(\\d{3})+(?!\\d))";
    String formattedPhone = phoneNumber.replaceAll(regex, Constants.Characters.DASH);
    return formattedPhone;
}

但是它会产生不同的结果。

因为一开始你的问题不清楚,我有一个Java和Javascript的解决方案。我也会把javascript放在这里,因为:-)

爪哇8 首先,我们使用
子字符串(0,3)
获得前三个数字。我们向其中添加
-
,并使用剩余的组(
x.substring(3)
),将它们分成两组,然后使用String.join将它们连接在一起,并使用
-
作为连接字符

String test = "01122222222";
String res = test.substring(0,3) + "-";
String[] parts = test.substring(3).split("(?=(?:..)*$)");
res += String.join("-",parts);

System.out.println(res);


前Java 8 从评论中可以清楚地看出,您没有使用java8,因此在java8之前,还有各种其他解决方案。您可以像我一样使用循环,并手动添加最后一部分。(或者,您可以使用循环中的每个元素创建字符串,然后再次获取子字符串以删除最后一个
-


因为一开始你的问题不清楚,我有一个Java和Javascript的解决方案。我也会把javascript放在这里,因为:-)

爪哇8 首先,我们使用
子字符串(0,3)
获得前三个数字。我们向其中添加
-
,并使用剩余的组(
x.substring(3)
),将它们分成两组,然后使用String.join将它们连接在一起,并使用
-
作为连接字符

String test = "01122222222";
String res = test.substring(0,3) + "-";
String[] parts = test.substring(3).split("(?=(?:..)*$)");
res += String.join("-",parts);

System.out.println(res);


前Java 8 从评论中可以清楚地看出,您没有使用java8,因此在java8之前,还有各种其他解决方案。您可以像我一样使用循环,并手动添加最后一部分。(或者,您可以使用循环中的每个元素创建字符串,然后再次获取子字符串以删除最后一个
-


正则表达式就可以做到这一点。只要前面有3位数字,就用“-[数字][数字]”替换2位数字集

public static void main(String[] args) {
    String s = "01122222222";
    System.out.println(s.replaceAll("(?<=\\d{3})(\\d{2})+?", "-$1"));
}

PS:这种方法不应该在prod环境中使用,而只是为了取悦我自己的固执,即这个问题可以用一个正则表达式来解决。

。只要前面有3位数字,就用“-[数字][数字]”替换2位数字集

public static void main(String[] args) {
    String s = "01122222222";
    System.out.println(s.replaceAll("(?<=\\d{3})(\\d{2})+?", "-$1"));
}

PS:这种方法不应该在prod环境中使用,它的编写完全是为了取悦我自己的固执,即使用一个正则表达式可以解决这个问题。

正则表达式用于查找特定模式,而不是格式化字符串正则表达式用于查找特定模式,不用于格式化stringsString.join是invalid@TeodorKolev这是因为您使用的是旧版本的Java,我也添加了该解决方案now@TeodorKolev:
String.join
是近两年半前在Java8中添加的invalid@TeodorKolev这是因为您使用的是旧版本的Java,我也添加了这个解决方案now@TeodorKolev:
String.join
是近两年半前在Java8中添加的。很好。吹毛求疵:不是正则表达式进行替换。是
replaceAll
@T.J.Crowder-是的。我的意思是一样的。编辑了答案,将其更改为此方法不应。。。另外,感谢Ideone链接:)“这个正则表达式不应该在prod环境中使用,它的编写完全是为了取悦我自己的固执,即这个问题可以用一个正则表达式来解决。”LOL-因为后面的积极外观?@T.J.Crowder-不。我对积极的外观没有意见。我认为这里真正的问题是,只有少数人(将审查此代码的人)理解此正则表达式的行为。因此,可读性是一个问题。如果这个代码进入prod:PNice one,我的PR可能会被拒绝。吹毛求疵:不是正则表达式进行替换。是
replaceAll
@T.J.Crowder-是的。我的意思是一样的。编辑了答案,将其更改为此方法不应。。。另外,感谢Ideone链接:)“这个正则表达式不应该在prod环境中使用,它的编写完全是为了取悦我自己的固执,即这个问题可以用一个正则表达式来解决。”LOL-因为后面的积极外观?@T.J.Crowder-不。我对积极的外观没有意见。我认为这里真正的问题是,只有少数人(将审查此代码的人)理解此正则表达式的行为。因此,可读性是一个问题。如果此代码进入prod:P,我的PR可能会被拒绝