0

我有一个字符串,它的值可以是"45", "45.00", "45.0","45.000""45.23"。对于所有这些我想保存"45"的都是0小数部分,否则就是"45.23".

我该怎么做?我应该为此使用正则表达式吗?

4

6 回答 6

0

您可以将字符串拆分为小数点并获取第一个元素:

java.util.Arrays.toString(testString.split("\\.")
于 2013-03-05T11:48:04.933 回答
0

是的,你可以使用正则表达式,试试这个

    s = s.replaceAll("(.?)(\\.0+)?", "$1");
于 2013-03-05T11:48:55.213 回答
0

使用带有 . 作为分隔符

如果第二个令牌为零,则忽略第二个令牌,否则考虑第二个令牌

示例代码

StringTokenizer st = StringTokenizer(s,".");
int count = 0;
while(st.hasTokens)
{
 if (count==1)
 {
   // Read the token and compare it to zero and modify the original string s and your further processing
 }
 else{
    st.nextToken();
    count++;
 }
}
于 2013-03-05T11:50:53.997 回答
0

使用以下内容:

s.replaceAll("\\.0+", "")
于 2013-03-05T12:22:07.977 回答
0

好吧,经过一番搜索,我想我已经找到了你要找的东西。不需要正则表达式来做到这一点。Java 中有一个专门用于十进制格式的类,称为DecimalFormat ,建议您在此页面中查看如何在 Java 中格式化数字。这是一个例子:

    public class NumberFormat {

    public static void main(String[] args){
        DecimalFormat myFormatter = new DecimalFormat("###.##");
        System.out.println(myFormatter.format(45));
        System.out.println(myFormatter.format(45.000));
        System.out.println(myFormatter.format(45.23));
        System.out.println(myFormatter.format(45.258));

    }
}

产生输出:

  45
  45
  45,23
  45,26
于 2013-03-05T12:22:26.603 回答
0

我假设您的字符串由,, 或分隔,

如果你想要一个双打列表,你可以使用:

List<Double> lst = new ArrayList<Double>();
for(String s : yourString.split(",\\s?")) {
    try {
        Double double = Double.valueOf(s);
        lst.add(double);
    } catch(NumberFormatException nfe) {
        nfe.printStackTrace();
    }
}

如果你想要一个数字列表,你可以使用:

List<Number> lst = new ArrayList<Number>();
for(String s : yourString.split(",\\s?")) {
    try {
        Double double = Double.valueOf(s);
        if(double == (int)double) {
            lst.add(double);
        } else {
            lst.add((Integer)double.intValue());
        }
    } catch(NumberFormatException nfe) {
        nfe.printStackTrace();
    }
}
于 2013-03-05T12:22:52.727 回答