用于格式化二进制数的正则表达式,在Java中,从右到左每4个字符使用空格

用于格式化二进制数的正则表达式,在Java中,从右到左每4个字符使用空格,java,regex,binary,Java,Regex,Binary,我正在为Android编写一个二进制/十进制/十六进制转换器,并试图用一个正则表达式在Java中格式化一个字符串,从右到左每四个字符添加一个空格 这段代码从左到右运行,但我想知道是否有一种方法可以反转它 stringNum = stringNum.replaceAll("....", "$0 "); 在C#中,您可以执行类似于Regex.Replace(“1234567890”、“{4}”、“$0”、RegexOptions.rightoleft) 不幸的是,在Java 正如一篇评论中所建议的

我正在为Android编写一个二进制/十进制/十六进制转换器,并试图用一个正则表达式在Java中格式化一个字符串,从右到左每四个字符添加一个空格

这段代码从左到右运行,但我想知道是否有一种方法可以反转它

stringNum = stringNum.replaceAll("....", "$0 ");
C#
中,您可以执行类似于
Regex.Replace(“1234567890”、“{4}”、“$0”、RegexOptions.rightoleft)

不幸的是,在
Java

正如一篇评论中所建议的,您可以反转字符串,应用正则表达式,然后再次反转


另一种解决方案是从字符串中提取最后一个
N
数字,其中
N
可被
4
整除。然后可以成功应用替换,并在开始处连接字符串的其余部分

也许可以像这样使用
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

对我来说,最佳实践是从字符串的开头到结尾:

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
String inputString=“12341234112341234”;
int j=0;
StringBuilder sb=新的StringBuilder(inputString);
对于(int i=4;i
为什么不在对字符串进行操作之前将其反转?我曾想过这一点,但我对Regex不是很熟悉,也不确定是否有这样的选项。@A_Kiniyalocts我没有。我个人建议使用StringBuilder解决此类问题。谢谢,这也很有效。谢谢你一步一步的解释。
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