正则表达式编号

时间:2016-08-29 11:00:55

标签: java regex

我的目标是将下一个号码func convierteImagen(cadenaImagen: NSArray) -> UIImage? { var bytes = [UInt8]() for i in 0..<cadenaImagen.count { if let signedByte = Int8(String(cadenaImagen[i])) { bytes.append(UInt8(bitPattern: signedByte)) } else { // Do something with this error condition } } let datos: NSData = NSData(bytes: bytes, length: bytes.count) return UIImage(data: datos) // Note it's optional. Don't force unwrap!!! } 格式化为此01122222222 前三个数字,短划线和所有下一个数字后面的第二个破折号。已经尝试过:

011-22-22-22-22

但它会产生不同的结果。

2 个答案:

答案 0 :(得分:4)

正则表达式可以解决问题。用&#34; - [digit] [digit]&#34;替换2位数组。只要你有3位数字。

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

Live Example

O / P:

011-22-22-22-22
PS:这种方法不应该用于prod环境,而且只是为了解释我自己的固执,这个问题可以用一个正则表达式来解决。

答案 1 :(得分:2)

由于一开始你的问题并不清楚,我有一个Java和Javascript的解决方案。我将javascript留在这里以及因为:-)

Java 8

首先我们使用substring(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);

Live Example

Pre Java 8

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

String test = "01122222222";
String res = test.substring(0,3) + "-";
String[] parts = test.substring(3).split("(?=(?:..)*$)");
for(int i = 0; i < parts.length-1; i++){
    res += parts[i]+"-";
}
res+=parts[parts.length-1];
System.out.println(res);

Live Example

的Javascript

使用相同的逻辑,您也可以在javascript中执行此操作。您可以运行代码段以查看结果实际上是您所期望的。

&#13;
&#13;
var x = "01122222222";
var res = x.substring(0,3) +"-"+ x.substring(3).split(/(?=(?:..)*$)/).join("-");
console.log(res)
&#13;
&#13;
&#13;