私はString
次のようなものを持っています:
"The answer is 1000"
残りの部分を破棄せずに、数値1000にコンマを挿入したいと思いますString
。
注:String
長さが異なる他のにもこれを使用したいのでsubstring(int index)
、番号を取得することはお勧めしません。
私が考えることができる最善の方法はregex
コマンドを使用することですが、その方法がわかりません。
前もって感謝します!
以下は、すべての非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()
。
文字列からすべての(自然)数を抽出する最も効率的な方法から変更:
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;
}
}
正規表現を使用できます。
[0-9]+
1000
連続する数字のセットを見つけるには、、、または7500
、などと一致します。これはhttp://regexpal.com/22387234
でテストできます。これは、小数点を含む数値の場合は処理されません。
これは完全ではなく、コードの答えがありますが、基本的なアルゴリズムは次のとおりです。
0
文字列の最後から始まる関数を記述し、現在の文字のインデックスが(に変換されないよう300
にする)でない限り、(最後から)3桁ごとにその前にコンマを挿入します,300