我的目标是将下一个号码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
但它会产生不同的结果。
答案 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"));
}
O / P:
011-22-22-22-22
PS:这种方法不应该用于prod环境,而且只是为了解释我自己的固执,这个问题可以用一个正则表达式来解决。
答案 1 :(得分:2)
由于一开始你的问题并不清楚,我有一个Java和Javascript的解决方案。我将javascript留在这里以及因为:-)
首先我们使用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);
从评论中可以清楚地看到你没有使用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);
使用相同的逻辑,您也可以在javascript中执行此操作。您可以运行代码段以查看结果实际上是您所期望的。
var x = "01122222222";
var res = x.substring(0,3) +"-"+ x.substring(3).split(/(?=(?:..)*$)/).join("-");
console.log(res)
&#13;