3

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

这段代码从左到右工作,但我想知道是否有办法可以反转它。

stringNum = stringNum.replaceAll("....", "$0 ");
4

4 回答 4

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
于 2013-02-14T01:04:38.457 回答
2

C#你会做类似的事情Regex.Replace("1234567890", ".{4}", " $0", RegexOptions.RightToLeft)

不幸的是,Java 你不能

正如 Explossion Pills 在评论中建议的那样,您可以反转字符串,应用正则表达式,然后再次反转它。

另一种解决方案可能是N从字符串中获取最后一个数字,其中N可以被4. 然后您可以成功应用替换,并在开头连接字符串的剩余部分。

于 2013-02-14T01:01:58.230 回答
0
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);
于 2013-02-14T01:11:34.637 回答
0

对我来说,最好的做法是从字符串的开头到结尾:

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
于 2017-10-03T11:03:00.147 回答