2012-07-12 116 views
-4

這段代碼有什麼問題?Java正則表達式的搜索和替換

public int convert(String param){ 
    System.out.println(param); // OUTPUT1 
    if(param=="NUM1"){ 
     return 10; 
    }else if(param=="NUM2"){ 
     return 20; 
    }else 
     return 0; 
    } 
    return param; 
} 

String Formula="[NUM1]+[NUM2]"; 
Formula = Formula.replaceAll("\\[(.*?)\\]", convert("$1")); 
System.out.println(Formula); // OUTPUT2 

//OUTPUT1 - $1 
//OUTPUT2 - 0+0 

我希望OUTPUT1爲(NUM1或NUM2),OUTPUT2爲「10 + 20」。

+2

@Gorets 19個問題有4個接受14個回答1接受和65代表。我認爲你無權發表這樣的言論。 – 2012-07-12 18:45:02

+0

感謝您的回答。你能指導我解決問題嗎? – Jaynova 2012-07-12 18:54:37

回答

7

在Java中,不能只使用"$1"來引用諸如腳本語言之類的匹配表達式的部分。而是使用捕獲組。

您應該先閱讀javadoc的Pattern

不是最好的東西:

String line = "[NUM1]+[NUM2]"; 
Pattern p = Pattern.compile("\\[(.*?)\\]"); 
Matcher m = p.matcher(line); 
while(m.find()) { 
    String token = m.group(1); 
    String newValue = convert(token); 
    line = line.replaceAll(token, newValue); 
} 
+0

感謝您的回答。你能指導我解決問題嗎? – Jaynova 2012-07-12 18:55:03

+0

添加代碼。對不起,早些時候很短。 – 2012-07-12 20:52:34

1

Java不是一種功能語言(然而,v8可能會改變它們)。看起來你所要做的是將一個回調函數傳遞給replaceAll,但這在Java中不起作用。

您需要做的不是使用replaceAll,而是使用匹配器並獲取所有的令牌,然後循環遍歷它們並在每個令牌上調用convert(),並將其添加回字符串中。它更麻煩,但它是唯一的方法去如果你想自己構建它。

+0

感謝您的回答。你能指導我解決問題嗎? – Jaynova 2012-07-12 18:53:53

相關問題