2013-04-21 21 views
2

我本來可以使用Decimal Format,但在這種情況下我必須使用regex。 我有以下字符串myString =「0.44587628865979384」;我需要把它修剪到小數點後三位,使得看起來0.445如何使用`正則表達式'修剪已解析的字符串?

我試過如下:

String myString = "0.44587628865979384"; 
String newString = myString.replaceFirst("(^0$.)(\\d{3})(\\d+)","$1$2"); 
// But this does not work. What is the problem in here? 

回答

5

這不是(^0$.)。這是(\\d*.)

String newString = myString.replaceAll("(\\d*.)(\\d{3})(\\d+)", "$1$2"); 
+1

也許'.' - >'\\。'? – 2013-04-24 19:05:31

2

試試這個:

String newString = myString.replaceAll"(.*\\....).*", "$1"); 
+0

謝謝你的回答。它工作正常:'字符串newString = myString.replaceAll(「(。* \\ ....)。*」,「$ 1」);'新的不起作用... – Buras 2013-04-21 06:51:16

3

嗯,一個適合的模式可能是「^\ d \。\ d {3}「,但是您必須進行匹配才能找回它(例如,您正在獲取所需內容,而不是替換您不需要的內容)。

...但是,爲什麼你會用這個工作的正則表達式?

正則表達式用於查找文本中的常見模式,並允許您提取/刪除/列出它們。它不打算處理字符串的測量

你需要的是串入使用的子方法字符的子集:

myString.substring(5); 

如果小數點的位置不同而不同:

myString.substring(myString.indexOf(".") + 4); 

請記住:「有些人在遇到問題時會想:」我知道,我會用正則表達式。「現在他們有兩個問題。 (http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html

+0

雖然我同意應該考慮在使用正則表達式之前真的很難,這裏給出的替代方法不能很好地工作。在小數點前面有可變數字的數字當然是可能的。 – 2013-04-21 07:14:12

+0

是的,但我仍然建議找到小數點並從中得出子串的索引。 – Jack 2013-04-22 19:46:09

+0

聽起來好多了......如果你可以用你的答案來更新你的答案,你就可以得到我的投票:D – 2013-04-23 04:44:57

相關問題