Java 在字符串数学中的数字中加一个逗号

Java 在字符串数学中的数字中加一个逗号,java,android,android-edittext,Java,Android,Android Edittext,我有一串数学数字,我只想在数字中加一个逗号,例如: String s="(1000+2000000-5000.8÷90000+√5×80000)"; 我想将它发送到一个方法,以便将其转换为 String s="(1,000+2,000,000-5,000.8÷90,000+√5×80,000)"; 我正在使用: DecimalFormat myFormatter = new DecimalFormat("$###,###.###"); String output = myFormatter.

我有一串数学数字,我只想在数字中加一个逗号,例如:

String s="(1000+2000000-5000.8÷90000+√5×80000)";
我想将它发送到一个方法,以便将其转换为

String s="(1,000+2,000,000-5,000.8÷90,000+√5×80,000)";
我正在使用:

DecimalFormat myFormatter = new DecimalFormat("$###,###.###");
String output = myFormatter.format(s);
System.out.println(output);

但由于存在运算符“+-…”

所以出现错误。您可以尝试以下代码:

我正在使用
str.toCharArray()

并调用函数:

    String s="(1000+2000000-5000÷90000+√5×80000)";
    Log.e("s", s);
    String result = parseResult(s);
    Log.e("result", result);
日志:

E/s: (1000+2000000-5000÷90000+√5×80000)
E/result: (1,000+2,000,000-5,000÷90,000+√5×80,000)

使用
Matcher.appendReplacement
的简单方法还不够吗

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

....

static String formatMyString(String input){
    DecimalFormat myFormatter = new DecimalFormat("###,###.###");
    StringBuffer sb = new StringBuffer();
    Pattern p = Pattern.compile("(\\d+\\.*\\d+)");
    Matcher m = p.matcher(input);
    while(m.find()){
        String rep = myFormatter.format(Double.parseDouble(m.group()));
        m.appendReplacement(sb,rep);            
    }
    m.appendTail(sb);
    return sb.toString();
}

您可以使用正则表达式删除运算符,然后将其输入到您的conversion.java operator+-。。只适用于类型number ex:int,long,double我需要运算符我不能删除它@bbnumber2ok java如何修复它在我的情况下@indralesmana@mhd您可以尝试将字符串拆分为每个元素的数组:
[“1000”、“+”、“2000000”等]
,然后对所有数字使用
DecimalFormat
,然后将字符串重新组合在一起。谢谢你的答案。请修复错误十进制数以批准答案
0.50008
我得到
0.5008
@mhd你想要什么样的结果?我也想处理十进制数,他也在一个点后加了逗号。。在获取eror
不兼容类型之前,我只想指出一点:StringBuilder无法转换为StringBuffer
@mhd,那么您可能正在使用Java 8。只需将StringBuilder更改为StringBuffer。我已经更新了我的答案。行,但为什么只在点后取三个数字,比如
0.53618
它只取
0.536
我想在点后取所有数字point@mhd因为您使用的格式是
############
,表示小数点后3位。如果您想要更多,只需将格式更改为
,###############
或任何您想要的格式。
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

....

static String formatMyString(String input){
    DecimalFormat myFormatter = new DecimalFormat("###,###.###");
    StringBuffer sb = new StringBuffer();
    Pattern p = Pattern.compile("(\\d+\\.*\\d+)");
    Matcher m = p.matcher(input);
    while(m.find()){
        String rep = myFormatter.format(Double.parseDouble(m.group()));
        m.appendReplacement(sb,rep);            
    }
    m.appendTail(sb);
    return sb.toString();
}