我正在为 Android 编写二进制/十进制/十六进制转换器,并尝试使用正则表达式在 Java 中格式化字符串,该正则表达式将从右到左每四个字符添加一个空格。
这段代码从左到右工作,但我想知道是否有办法可以反转它。
stringNum = stringNum.replaceAll("....", "$0 ");
也许不是StringBuilder
像这样使用正则表达式
String data = "abcdefghij";
StringBuilder sb = new StringBuilder(data);
for (int i = sb.length() - 4; i > 0; i -= 4)
sb.insert(i, ' ');
data = sb.toString();
System.out.println(data);
输出:
ab cdef ghij
在C#
你会做类似的事情Regex.Replace("1234567890", ".{4}", " $0", RegexOptions.RightToLeft)
。
不幸的是,Java
你不能。
正如 Explossion Pills 在评论中建议的那样,您可以反转字符串,应用正则表达式,然后再次反转它。
另一种解决方案可能是N
从字符串中获取最后一个数字,其中N
可以被4
. 然后您可以成功应用替换,并在开头连接字符串的剩余部分。
String str = "0123456789ABCDE";
// Use a StringBuffer to reverse the string
StringBuffer sb = new StringBuffer(str).reverse();
// This regex causes " " to occur before each instance of four characters
str = sb.toString().replaceAll("....", "$0 ");
// Reverse it again
str = (new StringBuffer(str)).reverse().toString();
System.out.println(str);
对我来说,最好的做法是从字符串的开头到结尾:
String inputString = "1234123412341234";
int j = 0;
StringBuilder sb = new StringBuilder(inputString);
for (int i = 4; i < kkm.getFiscalNumber().length(); i += 4) {
sb.insert(i + j, ' ');
j++;
}
String result = sb.toString(); // 1234 1234 1234 1234