2010-12-13 22 views
9

刪除一些字符想從我的字符串我如何從我的字符串

刪除以下所有字符的「> [] - 」

目前IM這樣做。但必須有一個更有效的方式

newString = myString.replace(">","").replace("[","").replace("]","").... 
+0

嗯,你可以使用正則表達式,但你不得不逃避特殊字符。你在談論什麼樣的效率?運行時還是您自己的(即代碼行)? – 2010-12-13 15:06:33

+0

擔心這些特定問題的「效率」表明過早優化;我非常懷疑*這個*方法是你的應用程序的瓶頸。請花些時間找出您的應用程序*真的很慢並且需要優化。 – Bombe 2010-12-13 15:20:23

回答

9

使用能夠描述你要替換的字符,替換所有匹配正則表達式的方法的正則表達式:

newString = myString.replaceAll("[<>\\[\\],-]", ""); 

(編輯:我不認爲<>都應該進行轉義,實際上而我忘了加倍的反斜槓,因爲它們會被解釋兩次:由Java編譯器的正則表達式引擎一次又一次)

+0

中的所有這些字符都變成了魅力。謝謝。 – code511788465541441 2010-12-13 15:22:15

+0

如果我想保留新行,該怎麼辦? – Mann 2016-06-10 06:33:12

1
newString = myString.replaceAll("[>\\[\\],-]", ""); 

反斜線是逃避「[」,因爲第一個參數實際上是一個正則表達式。

+0

打我吧,+1 – 2010-12-13 15:06:30

+0

它不起作用 – code511788465541441 2010-12-13 15:07:13

+0

呃......你想要將這些角色包裝在角色類('[]')中,因爲你正在尋找它們中的任何一個,不是連續排列的所有它們的序列... – 2010-12-13 15:09:16

0

您可以遍歷每個字符,將它們逐一附加到StringBuilder(),除非它們與要刪除的字符之一匹配。

但我不確定這會快很多。

1
newString = myString.replaceAll("[>\\[\\],-]", ""); 
+0

作品,但它比我想要的更多。它刪除了所有數據的所有數據 – code511788465541441 2010-12-13 15:21:27

+0

@ user521180:編輯了一下,再試一次。如果它仍然不能按照你想要的方式工作,你能給我們一個數據樣本嗎? – darioo 2010-12-13 15:23:31

2

使用替代/的replaceAll方法導致的新模式每次編譯。所以如果你多次這樣做,我會強烈建議循環遍歷字符或創建一個單一的正則表達式來重複使用。

+0

請不要循環自己的角色;但如果這很重要,請執行「創建正則表達式」(一種新的'Pattern'實例,使用Java)。請參閱java.util.regex.Pattern的Java文檔,該文檔還提供了Java正則表達式引擎支持的正則表達式語法的基本概述。 – 2010-12-13 15:26:28

2

更高效的性能:是的。您不能從字符串中「刪除」字符,因此您無法創建新字符。考慮一個開關/箱基礎的解決方案:

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < s.length(); i++) { 
    switch(s.getCharAt(i)) { 
    case '>': 
    case '[': 
    case ']': 
    case ',': 
    case '-': break; 
    default: sb.append(s.getCharAt(i)); 
    } 
} 
s = sb.toString(); 
+0

這個問題的好解決方案! – Rahul 2017-12-01 05:42:23

6

可以使用String類的replaceAll方法。

您可以形成一個由您想要刪除的字符組成的字符類。替換字符串將爲空字符串""

但是你要刪除哪些字符可能是正則表達式元字符,因此需要轉義。您可以手動將它們轉義爲顯示多個答案,或者您可以使用Pattern.quote()方法。

String charToDel = ">[],-"; 
String pat = "[" + Pattern.quote(charToDel) + "]"; 
String str = "a>b[c]d,e-f"; 
str = str.replaceAll(pat,""); 

See it