2014-11-03 80 views
0

如何這個字符串轉換:轉換混合串翻番

String str = "***123.45***"; 

這雙:

double d = 123.45; 

當我使用的valueOf

double d = Double.valueOf("***123.04***"); 

或parseDouble

double d = Double.parseDouble("***123.45***"); 

它會拋出java.lang.NumberFormatException: For input string: ""123.04"",因爲該字符串不僅包含數字。我需要擺脫星號。

+0

使用全部替換 – 2014-11-03 14:52:48

+0

兩個問題:1.前兩位總是3位,後面是3位? 2.它們總是「*」,還是可以是另一個字符(如字母)? – 2014-11-03 14:53:11

回答

1

刪除asterixes儘量更換的API來代替所有的 「*」,如下:

double d = Double.valueOf("***123.04***".replace("*", "")); 
System.out.println(d); 
+2

沒有必要使用'replaceAll','replace'也可以工作,OP不必關心轉義星號。 – Tom 2014-11-03 14:57:14

+0

@Tom aha謝謝是的,我同意,現在更新! – SMA 2014-11-03 14:59:16

1

在你輸入之前

str = str.replace("*", ""); 
+0

你能幫我一個忙嗎?試試你的代碼。 – Tom 2014-11-03 14:54:54

+0

除非和直到你逃脫「*」,否則這是行不通的。你知道通配符是怎麼回事:)? – SMA 2014-11-03 14:55:35

+2

'.replaceAll'使用正則表達式,所以它應該是'str.replace(「*」,「」);'或'str.replaceAll(「\\ *」,「」);' – 2014-11-03 14:56:30

0

嘗試使用正則表達式匹配的數量:

String s = "eXamPLestring>1.4365345>>ReSTOfString"; 
Pattern p = Pattern.compile("\\D*([0-9]*\\.*[0-9]*)\\D*"); 
Matcher m = p.matcher(s); 
if (m.find()) { 
    System.out.println(Double.parseDouble(m.group(1))); 

}