2015-04-07 78 views
-4
StringBuilder s = new StringBuilder(": 2573.01,,"); 
double d; 

上面的字符串需要转换为double。问题在于特殊字符。我如何删除这些?如何将特殊字符的字符串转换为Java中的int

预期结果:d = 2573.01;

+1

那么什么样的价值,你会指望* *,要转换为?它有一个小数点......你需要提供更多关于你在提问时想达到什么的背景。 –

+0

,因为你没有告诉我们你期望什么价值尝试s.replace(“anythinghere”,“”); – 12dollar

+0

是你想用这种格式转换的所有字符串:[空格] [数字]。[数字] ,,'? – MCHAppy

回答

3
String st = s.toString(); 
st = st.replaceAll(":", "").replaceAll(",", "").replaceAll(" ", ""); 
double d = Double.valueOf(st); //Decimal 
int i = (int)d; //No Decimal 
+0

不错的工作,但它不回答OP问题。他们想要返回double而不是int。 – MCHAppy

+0

如果你阅读,它清楚地说明了什么给了小数,什么不给,并且在他提到double的时候这个答案已经被解决了,当时他问了int。 – marko5049

0

你可以尝试用正则表达式提取数字。

String st = s.toString(); 
st.replaceAll("[^\\d\\.]",""); 
double n = Double.valueOf(st); 
+0

不幸的是,这不会处理很多边缘案例。如果它是一个负数呢? –

+0

是的,正则表达式需要修改任何额外的要求,但问题本身只针对特定的字符串。 – Dragondraikk

1

一个很好的一个衬里为您:

public double getDoubleFromNoisyString(String s) { 
    return Double.valueOf(
       s.replaceAll(
        "^.*?(-?\\d+(\\.\\d+)?).*$", 
        "$1")); 
} 

基本上,它查找字符串中的第一个值,该值似乎是在一个整数或十进制数的形式(包括一家领先的负标志)并忽视所有其他角色。

0
String str = ":- 2573.01,,"; 
str = str.replaceAll("[^\\d-.]", ""); 
double value = Double.parseDouble(str); 
System.out.println(value); 

输出:

-2573.01 
+0

@ user3520698我也检查了负数。 – MCHAppy

相关问题