2015-02-05 29 views
1

我試圖根據其中存在的特定短語來替換部分字符串。考慮字符串「你好,我的Dg6Us9k,我還活着。」如何替換Java中的一部分字符串?

我想搜索階段「我的」,並刪除8個字符的權利,這將刪除哈希碼。這給了字符串「你好,我還活着。」我怎樣才能在Java中做到這一點?

回答

1

使用正則表達式這樣也刪除空格:

public static void main(String[] args) { 
    String s = "Hello my Dg6Us9k. I am alive"; 
    String newString=s.replaceFirst("\\smy\\s\\w{7}", ""); 
    System.out.println(newString); 
} 

O/P: Hello. I am alive

+0

括號前的w表示會搜索一個單詞嗎? 7是最大長度還是所需長度? – Kahler 2015-02-05 13:36:16

+1

@Kahler - 確切7.w可以匹配'a-zA-Z_' – TheLostMind 2015-02-05 13:36:46

+0

這個工作非常好,謝謝你的建議!但是,它需要在顯示修改後的字符串之前首先傳遞給字符串。 – MisterIbbs 2015-02-05 13:45:43

2

這應做到:

String s = ("Hello my Dg6Us9k. I am alive"); 
s.replace(s.substring(s.indexOf("my"), s.indexOf("my")+11),""); 

即替換的字符串開始於「我」,是11字符沒事長。

+0

這也適用,感謝您的建議:) – MisterIbbs 2015-02-05 13:48:17

5

您可以通過string.replaceAll函數實現此功能。

string.replaceAll("\\bmy.{8}", ""); 

必要時,添加\\b\\b稱爲單詞字符和非單詞字符匹配的單詞邊界。 .{8}完全匹配以下8個字符。

之前my

System.out.println("Hello my Dg6Us9k. I am alive.".replaceAll("\\smy.{8}", "")); 
+0

你是什麼意思與「添加\\ b如有必要'?它有什麼作用? – Kahler 2015-02-05 13:33:46

+0

@TheLostMind根據他的預期輸出編輯,但他說我想搜索階段「我的」,並刪除8個字符的權利# – 2015-02-05 13:35:41

+0

@AvinashRaj - 亞......但是一旦我運行該程序,他的預期輸出不同於他* question * :) – TheLostMind 2015-02-05 13:36:31

1

Java中的字符串是不可改變的,所以你不能變化字符串。你必須創建一個新的字符串。因此,找到「我的」索引i。然後在(0 ... i)之後和(i + 8 ...)之間連接子串。

int i = s.indexOf("my"); 
if (i == -1) { /* no "my" in there! */ } 
string ret = s.substring(0,i); 
ret.concat(s.substring(i+2+8)); 
return ret; 
+0

關於不可變的好點。 – Kahler 2015-02-05 13:41:37

0

如果你想成爲靈活的對哈希碼長,使用正則表達式如下因素:

String foo="Hello my Dg6Us9k. I am alive."; 
String bar = foo.replaceFirst("\\smy.*?\\.", "."); 
System.out.println(bar); 
相關問題