3

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

Explosion 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 に答える