私は Android 用のバイナリ/10 進数/16 進数コンバーターを作成しており、右から左に 4 文字ごとにスペースを追加する正規表現を使用して 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
あなたにはできません。
Explosion 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