2013-02-26 57 views
2

我想用另一個字符串替換一部分字符串。例如,一個字符串進來,它包含meat,但我希望它將meat更改爲vegetable。我知道我可以用下面的語句來做到這一點。在java中識別和替換部分字符串7

str = str.replaceAll("meat", "vegetable");

不過,我需要有確切的資本。無論示例meat中的字母是大寫還是小寫,我都在尋找一種方法來執行此操作。

我的應用程序是一個Minecraft的過濾器。發誓,或者只是自定義菜單。就像我想要替換minecraft這個詞的每個實例,不管大小寫是Best game Ever!!

我修改了它,以便它可以識別並替換特定的大寫字母,但這是非常有限的。

我希望我已經提供了足夠的信息,以便有人可以幫助我。

回答

9

您可以通過在開始添加(?i)標誌使正則表達式不區分大小寫

str = str.replaceAll("(?i)meat", "vegatable"); 

例如

System.out.println("aBc def".replaceAll("(?i)abc","X")); // out: "X def" 
+0

這很好,謝謝! – TechnicolorDalek 2013-02-26 23:49:16

+0

如何執行更復雜的替換?比如,用完整的表達式字符串中的Math.sin(Math.toDegrees(30))替換Math.sin(30)。 – 2015-07-19 16:35:33

+1

@SharjithN。您可以嘗試重新使用捕獲組replaceAll(「Math \\。sin \\((\\ d +)\\)」,「Math.sin(Math.toDegrees($ 1))」)' – Pshemo 2015-07-19 17:06:54

4

的第一個參數replaceAll是一個正則表達式,你可以在嵌入標誌表達以使其不區分大小寫:

str = str.replaceAll("(?i)meat", "vegatable"); 
4

另一種方法:這裏的標誌不是顯式地在正則表達式中,而是作爲單獨的參數傳遞。

String input = "abc MeAt def"; 
Pattern pattern = Pattern.compile("meat", Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher(input); 
String output = matcher.replaceAll("vegetable"); 
System.out.println(output);