2015-07-02 72 views
3

我想獲得循環部分中的重複部分。例如,如果分數是0.6666667,我想得到0.67和重複部分(6)或0.36363636 0.36和(36)作爲匹配組。我嘗試在Java中使用捕獲組,但我不確定我是否正確地做。這裏是我現在所擁有的:找到重複組的Java模式

String patt = "(.+?)\\1+"; 

不幸的是,這匹配爲0.003003003爲「0」。有沒有辦法在這裏得到「003」?

+2

這不是一個有效的正則表達式。你不能從「?」量詞開始。 – fge

+0

我玩過它,並有中途工作的東西。在答案中編輯。 – Unknown

+0

這個問題對於我認爲的正則表達式來說不是任務。首先可以有一個「前綴」,例如1/15 = 0.0666 ... 7(前綴= 0.0),那麼我們必須考慮到最後的密碼是四捨五入的。如果你有0.163163 ...那麼這可能會以2(舍入)或6結尾,沒有完全重複...正則表達式的另一個問題。需要分析字符串的複雜功能。 – maraca

回答

1

我真的不明白你想解決的根本問題。 看來你想要做的不是文字擺弄,而是舍入

試試這個:

BigDecimal r = new BigDecimal("0.66666667").setScale(2, RoundingMode.HALF_UP); 
System.out.println(r); 

它會顯示:

0.67 

同樣,對於0.363636...它會給你0.36等。

如果你真的想要去與正則表達式,和你輸入小數點前有0,你也許可以嘗試

0\.(.+?)\\1+ 
0

"(.+)\\1+"應該找到003時間最長序列索引2.