我有String
,如下所示:
"The answer is 1000"
我想在不破坏String
的其余部分的情况下在数字1000中插入逗号。
注意:我也想将此用于其他String
不同长度的substring(int index)
,因此不会建议regex
获取该号码。
我能想到的最好的方法是使用{{1}}命令,但我不知道如何。
提前致谢!
答案 0 :(得分:5)
以下格式化所有非十进制数字:
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();
}
e.g。如果你打电话:formatNumbers("The answer is 1000 1000000")
结果是:"The answer is 1,000 1,000,000"
答案 1 :(得分:1)
从Most efficient way to extract all the (natural) numbers from a string修改:
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;
}
}
答案 2 :(得分:0)
您可以使用正则表达式:
[0-9]+
要查找连续的数字集,因此它会匹配1000
或7500
或22387234
等。您可以在http://regexpal.com/上对此进行测试处理涉及小数点的数字的情况,BTW。
这不是一个完整的代码答案,但基本算法如下:
0
(这将阻止300
被转变为,300