2

私はString次のようなものを持っています:

"The answer is 1000"

残りの部分を破棄せずに、数値1000にコンマを挿入したいと思いますString

注:String長さが異なる他のにもこれを使用したいのでsubstring(int index)、番号を取得することはお勧めしません。

私が考えることができる最善の方法はregexコマンドを使用することですが、その方法がわかりません。

前もって感謝します!

4

3 に答える 3

5

以下は、すべての非10進数をフォーマットします。

public String formatNumbers(String input) {
  Pattern p = Pattern.compile("\\d+");
  Matcher m = p.matcher(input);
  NumberFormat nf = NumberFormat.getInstance();        
  StringBuffer sb = new StringBuffer();
  while(m.find()) {
    String g = m.group();
    m.appendReplacement(sb, nf.format(Double.parseDouble(g)));            
  }
  return m.appendTail(sb).toString();
}

たとえば、電話する場合:formatNumbers("The answer is 1000 1000000")

結果は次のとおりです。"The answer is 1,000 1,000,000"

を参照してください:NumberFormatおよびMatcher.appendReplacement()

于 2012-01-09T02:20:20.233 に答える
1

文字列からすべての(自然)数を抽出する最も効率的な方法から変更:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {

private static final String REGEX = "\\d+";

public static void main(String[] args) {
    String input = "dog dog 1342 dog doggie 2321 dogg";
    Pattern p = Pattern.compile(REGEX);
    Matcher m = p.matcher(input); // get a matcher object
    int end = 0;
    String result = "";
    while (m.find()) {
        result = result + input.substring(end, m.start());
        result = result
                + addCommas(
                        input.substring(
                                m.start(), m.end()));
        end = m.end();
    }
    System.out.println(result);
}

private static String addCommas(String s) {
    char[] c = s.toCharArray();
    String result = "";
    for (int i = 0; i < s.length(); i++) {
        if (s.length() % 3 == i % 3)
            result += ",";

        result += c[i];
    }
    return result;
}

}

于 2012-01-09T02:27:56.660 に答える
0

正規表現を使用できます。

[0-9]+

1000連続する数字のセットを見つけるには、、、または7500、などと一致します。これはhttp://regexpal.com/22387234でテストできます。これは、小数点を含む数値の場合は処理されません。

これは完全ではなく、コードの答えがありますが、基本的なアルゴリズムは次のとおりです。

  • そのパターンを使用して、文字列内の一致のインデックス(さまざまな一致が開始する文字のインデックス)を検索します。
  • これらの各インデックスから、文字列内の数字の数字のみを含む一時的な文字列に数字をコピーします
  • 0文字列の最後から始まる関数を記述し、現在の文字のインデックスが(に変換されないよう300にする)でない限り、(最後から)3桁ごとにその前にコンマを挿入します,300
  • replace()メソッドを使用して、ソース文字列の元の数値をコンマで囲まれた文字列に置き換えます
于 2012-01-09T02:19:43.107 に答える