2011-09-26 106 views
66

我想刪除特殊字符,例如:從使用Java的字符串如何從字符串中刪除特殊字符?

- +^. : , 

+0

你顯然已經知道什麼是正則表達式是基於你如何標記你的問題。你有沒有嘗試閱讀'String'類的文檔?特別是,查找「正則表達式」一詞;有幾種方法,有點想法應該告訴你如何繼續...... :) –

+2

「特殊字符」這個短語被過度使用,幾乎完全沒有意義。如果你的意思是,「我有這個**特定**字符的列表,我想刪除」,然後按照托馬斯的建議,用正則表達式字符類和'replaceAll'形成你的模式。如果您有更深奧的要求,請編輯問題。 :) –

+1

那些不是特殊字符... 這些是:äâêíìéè,因爲它們不是你常見的1字節字符類型,例如 - + ^是...... 無論如何,正如Ray所說的,要麼爲他們做一個'replaceAll',要麼對字符串進行解析,把不是你想要取出的字符的字符添加到另一個字符串中,最後只需要對你要返回的字符串進行+ =。 –

回答

203

這取決於你定義爲特殊字符,但嘗試replaceAll(...)

String result = yourString.replaceAll("[-+.^:,]",""); 

注意,^字符不能在列表中的第一個,因爲你那麼要麼逃跑呢或者它意味着「除這些字符以外的任何字符」。

另注:-字符必須是列表中的第一個或最後一個,否則你不得不逃避它或將它定義了一個範圍(例如:-,將意味着「範圍內的所有字符:,

因此,爲了保持一致性而不依賴於字符定位,您可能希望轉義所有那些在正則表達式中具有特殊含義的字符(以下列表不完整,因此請注意其他字符如({,$等):

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]",""); 


如果你想擺脫所有的標點和符號的,試試這個正則表達式:\p{P}\p{S}(記住,Java中的字符串,你不得不逃回斜線:"\\p{P}\\p{S}")。

第三種方法可以是這樣的,如果你能確切地定義什麼應該在你的字符串中左起:

String result = yourString.replaceAll("[^\\w\\s]",""); 

這意味着:代替一切,是不是一個單詞字符(AZ在任何情況下, 0-9或_)或空格。

編輯:請注意,有一些其他模式可能會有幫助。但是,我無法全部解釋它們,因此請參閱regular-expressions.info的參考部分。

這裏的限制較少的替代品「定義允許的字符」的方法,如建議由雷:

String result = yourString.replaceAll("[^\\p{L}\\p{Z}]",""); 

正則表達式匹配的一切,這是不以任何語言的信,而不是一個分隔符(空格,換行符等)。請注意,您不能使用[\P{L}\P{Z}](大寫字母P表示不具有該屬性),因爲這意味着「所有不是字母或空格」,幾乎匹配所有內容,因爲字母不是空格,反之亦然。

上的Unicode

附加信息的一些Unicode字符似乎會由於不同的可能的方式來對其進行編碼(作爲單個碼點或代碼點的組合)的問題。有關更多信息,請參閱regular-expressions.info

+0

+1爲最佳通用解決方案。由於您在OP沒有詳細信息的情況下列出了一些變體,因此您可能會顯示並解釋像'[\ P {L}]' –

+0

這樣的模式。另請注意,'-'字符必須是第一個或最後一個在列表中或它需要被轉義。 – Kapep

+0

'[^ \\ p {L} \\ p {Z}]'似乎也消除了德國變音(ä,ö,ü)(至少它對我來說是這樣):所以「正則表達式匹配所有這不是任何語言的字母「似乎不是100%正確的 – Peter

13

嘗試replaceAll()方法的String類。

BTW這裏是方法,返回類型和參數。

public String replaceAll(String regex, 
         String replacement) 

例子:

String str = "Hello +-^ my + - friends^^^-- ^^^ +!"; 
str = str.replaceAll("[-+^]*", ""); 

應該刪除所有{ '^', '+', ' - '},你想刪除字符!

2

在Java中使用String.replaceAll()方法。 replaceAll應該足夠適合您的問題。

13

如這裏所描述 http://developer.android.com/reference/java/util/regex/Pattern.html

模式被編譯的正則表達式。在許多情況下,如String.matches,String.replaceAllString.split等便利方法將是更可取的,但如果您需要使用相同的正則表達式進行大量工作,則編譯一次並重用它可能會更有效。 Pattern類及其伴侶Matcher也提供比String暴露的少量更多的功能。

public class RegularExpressionTest { 

public static void main(String[] args) { 
    System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()(")); 
    System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^(")); 
} 

public static String getOnlyDigits(String s) { 
    Pattern pattern = Pattern.compile("[^0-9]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
public static String getOnlyStrings(String s) { 
    Pattern pattern = Pattern.compile("[^a-z A-Z]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
} 

結果

String is = one 
Number is = 9196390097 
1

您可以刪除單個字符如下:

String str="+919595354336"; 

String result = str.replaceAll("\\\\+",""); 

System.out.println(result); 

OUTPUT:

919595354336 
0

如果你只是WA nt在java中進行文字替換,使用Pattern.quote(string)將任何字符串轉義爲文字。

myString.replaceAll(Pattern.quote(matchingStr), replacementStr) 
2

要刪除專責事務字符

字符串T2 = 「@#$%^ * &() - ';!?,/> < + abdd」;

t2 = t2.replaceAll(「\\ W +」,「」);

輸出將是:abdd。

這個效果很好。

0

這將替換所有字符,除了字母數字

replaceAll("[^A-Za-z0-9]","");