我有一个字符串,它的值可以是"45"
, "45.00"
, "45.0"
,"45.000"
等"45.23"
。对于所有这些我想保存"45"
的都是0
小数部分,否则就是"45.23"
.
我该怎么做?我应该为此使用正则表达式吗?
您可以将字符串拆分为小数点并获取第一个元素:
java.util.Arrays.toString(testString.split("\\.")
是的,你可以使用正则表达式,试试这个
s = s.replaceAll("(.?)(\\.0+)?", "$1");
使用带有 . 作为分隔符
如果第二个令牌为零,则忽略第二个令牌,否则考虑第二个令牌
示例代码
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++;
}
}
使用以下内容:
s.replaceAll("\\.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
我假设您的字符串由,
, 或分隔,
。
如果你想要一个双打列表,你可以使用:
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();
}
}