我有一个字符串可以包含"45"
,"45.00"
,"45.0"
,"45.000"
,"45.23"
等值。对于所有这些我想要保存"45"
如果小数部分全部为0
,则为"45.23"
。
我该怎么办?我应该使用正则表达式吗?
答案 0 :(得分:0)
你可以在小数点上拆分字符串并取第一个元素:
java.util.Arrays.toString(testString.split("\\.")
答案 1 :(得分:0)
是的,你可以使用正则表达式,试试这个
s = s.replaceAll("(.?)(\\.0+)?", "$1");
答案 2 :(得分:0)
使用StringTokenizer进行Tokenize。作为分隔符
如果第二个令牌为零,则忽略第二个令牌,否则考虑第二个令牌
示例代码
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++;
}
}
答案 3 :(得分:0)
使用以下内容:
s.replaceAll("\\.0+", "")
答案 4 :(得分:0)
嗯,经过一番搜索,我想我找到了你要找的东西。无需正则表达式。 Java中有一个名为DecimalFormat的十进制格式专用类,建议您查看如何在此page中格式化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
答案 5 :(得分: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();
}
}