我想刪除從一個字符串中的字符:刪除特殊字符作爲模式的Java
+ - ! () { } [ ]^~ : \
我也想將其刪除:
/*
*/
&&
||
我的意思是,我不會刪除&
或|
如果第二個字符跟在第一個字符後面,我將刪除它們(/* */ && ||
)
如何在Java中高效快速地執行此操作?
例子:
a:b+c1|x||c*(?)
將是:
abc1|xc*?
我想刪除從一個字符串中的字符:刪除特殊字符作爲模式的Java
+ - ! () { } [ ]^~ : \
我也想將其刪除:
/*
*/
&&
||
我的意思是,我不會刪除&
或|
如果第二個字符跟在第一個字符後面,我將刪除它們(/* */ && ||
)
如何在Java中高效快速地執行此操作?
例子:
a:b+c1|x||c*(?)
將是:
abc1|xc*?
這可以通過長時間來完成,但實際上very simple regex。
String aString = "a:b+c1|x||c*(?)";
String sanitizedString = aString.replaceAll("[+\\-!(){}\\[\\]^~:\\\\]|/\\*|\\*/|&&|\\|\\|", "");
System.out.println(sanitizedString);
我認爲java.lang.String.replaceAll(正則表達式的字符串,字符串替換)是所有你需要:
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String中)。
Thomas上寫道How to remove special characters from a string?:
這取決於你定義爲特殊字符,但儘量 的replaceAll(...):
String result = yourString.replaceAll("[-+.^:,]","");
注意,^字符不能這是列表中的第一個,因爲 你要麼必須逃避它,要麼意味着「除了這些 個字符」。
另一個注意: - 字符需要是 列表中的第一個或最後一個,否則你必須轉義它或定義一個範圍( 例如: - ,意思是「所有字符在範圍:於)
所以,爲了保持一致性,而不是依賴於性格 定位,你可能想逃避所有那些正則表達式中有一個 特殊含義的字符(下面的列表是不 完成,因此請注意其他字符(如{,$等):
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
如果你想擺脫所有的標點和符號,試試這個正則表達式: \ p {P} \ p {S}(請記住,在Java字符串中,你必須轉義 反斜槓:「\ p {p} \ p {S}「)。
第三種方法可以是這樣的,如果你能確切地定義 我應該在你的字符串中左起:
String result = yourString.replaceAll("[^\\w\\s]","");
這裏的限制較少的替代品「定義允許的字符」 的方法,因爲建議雷:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
正則表達式匹配的一切,這是不以任何語言文字和 不是一個分隔符(空格,換行符等)。請注意,您不能使用 [\ P {L} \ P {Z}](大寫P表示不具有該屬性),因爲該 意味着「所有不是字母或非空白的」,其中 幾乎匹配所有內容,因爲字母不是空格,並且是相反的。
在兩個辦法做到這一點:
1)
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("+");
arrayList.add("-");
arrayList.add("||");
arrayList.add("&&");
arrayList.add("(");
arrayList.add(")");
arrayList.add("{");
arrayList.add("}");
arrayList.add("[");
arrayList.add("]");
arrayList.add("~");
arrayList.add("^");
arrayList.add(":");
arrayList.add("/");
arrayList.add("/*");
arrayList.add("*/");
String string = "a:b+c1|x||c*(?)";
for (int i = 0; i < arrayList.size(); i++) {
if (string.contains(arrayList.get(i)));
string=string.replace(arrayList.get(i), "");
}
System.out.println(string);
2)
String string = "a:b+c1|x||c*(?)";
string = string.replaceAll("[+\\-!(){}\\[\\]^~:\\\\]|/\\*|\\*/|&&|\\|\\|", "");
System.out.println(string);
最好的建議?嘗試一下,看看有什麼作用。不要擔心效率或速度。這不可能有任何區別;只有當它發生時才擔心。 – duffymo
你嘗試了什麼? – ppeterka
你嘗試了什麼?你應該看看'String#replaceAll()'。 –