2013-07-22 177 views
-1

我需要一個正則表達式來做到以下幾點:更換每一場比賽,但第一

我有這個字符串:123.45.678.7,我需要從第二替換所有字符()。結果將是123.456787

¿任何人都可以幫助我嗎?

+3

我們可以,但你必須先試一下。 –

回答

0

該碼相匹配的所有使用正則表達式的一段時間,然後把第一小數指向返回字符串。

以下是測試結果:

123.45.678.7, 123.456787 

而這裏的代碼。

public class SecondMatch { 

    public String match(String s) { 
     StringBuilder builder = new StringBuilder(); 
     String[] parts = s.split("\\."); 
     for (int i = 0; i < parts.length; i++) { 
      builder.append(parts[i]); 
      if (i == 0) { 
       builder.append("."); 
      } 
     } 
     return builder.toString(); 
    } 


    public static void main(String[] args) { 
     String s = "123.45.678.7"; 
     String t = new SecondMatch().match(s); 
     System.out.println(s + ", " + t); 
    } 

} 
0

只需創建一個函數...

function removeAllButFirst(myParam) 
{ 
    var numReplaces = 0; 
    var retVal = myParam.replace(/\./g, function(allMatch, currMatch) { 
    return ++numReplaces==1 ? '.' : ''; }); 
    return retVal; 
} 
+0

請注意,OP爲實現語言標記了Java而不是JavaScript。 – ajp15243

+0

對不起 - 錯讀了Q - 這是一個JavaScript解決方案,不是java – Boycey

0

剛剛有了一個翻找,發現這個在網絡上 - 它相當粗糙,但會做的工作......

retVal = retVal.replaceFirst(".","$"); 
retVal = retVal.replaceAll(".",""); 
retVal = retVal.replaceFirst("$","."); 

這確實假設你的輸入中沒有任何$ - 如果你選擇了不同的字符。 它不是很好,可能有一個更好的Java正則表達式使用類似LookBehinds的東西,但我不是一個Java開發所以不能說。

1
System.out.println(
    "123.45.678.7".replaceAll("\\G((?!^).*?|[^\\.]*\\..*?)\\.", "$1")); 
 
123.456787 

這也可以在不使用正則表達式來完成:

String str = "123.45.678.7"; 
String[] arr = str.split("\\.", 2); 

System.out.println(arr[0] + "." + arr[1].replace(".", "")); 
 
123.456787 
+1

爲滿足請求的正則表達式部分而進行遞增投票。 – davidfmatheson

0

此正則表達式也應該工作:

String str = "123.45.678.9"; 
String repl = str.replaceAll("([^.]*\\.[^.]*|[^.]*)\\.", "$1"); 
// repl = 123.456789