2013-07-09 37 views
3

我有這樣的代碼:的Java String.replaceAll以不同的匹配和替換的標準

String polynomial = "2x^2-4x+16"; 
String input = polynomial.replaceAll("[0-9a-zA-Z][-]", "+-"); 

的問題是,我不希望真正替代[0-9a-zA-Z]字符。

此前,我曾使用過polynomial.replace("-","+-");,但是這給了負輸出不正確的輸出。

新標準[0-9a-zA-Z][-]解決了負電源問題;但是,當我只需要在-之前插入+而不刪除該字符時,它將替換字符。

我如何使用等去除字符替換此模式:

polynomial.replaceAll("[0-9a-zA-Z][-]", c+"+-"); 

,其中「C」代表[0-9a-zA-Z]字符。

+0

你在做什麼?只是舉例輸入和輸出。所有關於你的嘗試的信息沒有上下文是沒有意義的。 – Bohemian

回答

4

您可以使用羣組來此:

polynomial.replaceAll("([0-9a-zA-Z])[-]", "$1+-"); 

$1指的是第一件事情在括號中。

Java regex reference

+0

http://docs.oracle.com/javase/tutorial/essential/regex/groups.html: 它表示反向引用是由\ 1,\ 2 ... \ n而不是$ 1產生的。我不知道那1美元......不會工作,但我想我會提到它 – MadDogMcNamara

+0

@MadDogMcNamara $ 1確實有效。 – user1094607

+1

@MadDogMcNamara'\ 1'用於組內引用*來自內部*正則表達式,而'$ 1'用於'替換...'中的組引用(在來自'String.replaceAll'的幾個鏈接讓你[這裏]( http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#appendReplacement(java.lang.StringBuffer,%20java.lang.String)))。 – Dukeling