2015-04-18 30 views
1

比方說,我有一些字符和數字文本,就像這樣:用一條語句自動格式化一個字符串中的數字?

Lorem ipsum 10.2357 dolor sit amet, 10.0000 consectetur adipiscing 50.9651 elit.

我怎樣才能獲得最終的字符串是這樣的:

Lorem ipsum 10.23 dolor sit amet, 10.00 consectetur adipiscing 50.96 elit.

用一個語句,而不創建額外的方法?

- >更新 我想在單個語句中這樣做,因爲我想在jasper報告中執行此操作,該報告不支持多語句。我可以創建一個方法,這個但這是太多的工作只是一個簡單的事情

+0

你有任何格式規則?或者簡單地在'.dd'之後截斷部分會像'1.5678'到'1.56'一樣好嗎? – Pshemo

+0

你能解釋一下,「使用單個語句而不創建其他方法」的限制來自哪裏?這聽起來像是某種任務。 –

+0

@ci_查看我對該問題的更新 –

回答

6

你可以用正則表達式(regular expression

E.g做到這一點:

str.replaceAll("(\\d+)\\.?(\\d{0,2})\\d+", "$1.$2") 

這不會在所有情況下工作。

+0

沒錯!由於我在字符串上的數字總是會有兩位數以上的數字,所以它會一直有效。謝謝。 –

+0

@MateusViccari更換'1.999'應該是什麼結果?是否應該將它舍入到「2.00」或「1.99」是否可以? – Pshemo

+0

@Pshemo如果是2.00,那會更好,但在我的情況下精度不是那麼重要。 –

-1

我不是Java專家,但可能你正在尋找printf eqivalent,這在Java是:

System.out.format("PI is %.2f", 3.14)

查找格式選項%f

+0

這不會做什麼問題,其中有一個字符串與數字作爲輸入。 –

0

它不能在一行中實現。

String s = "Lorem ipsum 10.2357 dolor sit amet, 10.0000 consectetur adipiscing 50.9651 elit"; 
    DecimalFormat df = new DecimalFormat("#.##"); 
    String[] sub = s.split(" "); 
    StringBuilder sb = new StringBuilder(); 
    for (int i=0; i<sub.length; i++) { 
     try { 
      double d = Double.parseDouble(sub[i]); 
      sb.append(df.format(d)); 
      sb.append(" "); 
     } catch (Exception e) { 
      sb.append(sub[i]); 
      sb.append(" "); 
     } 
    } 
    System.out.println(sb.toString()); 
相關問題