2017-02-10 78 views
4

說我有下面的代碼的Java的replaceAll失敗,美元符號源字符串

String test = "$abc<>"; 
test = test.replaceAll("[^A-Za-z0-9./,#-' ]", ""); 

測試現在是 「$ ABC」。

爲什麼它保持美元符號?

+2

美元符號之間x23和x27。它應該有它。哦,但由於課程被否定,因此被排除在外。哪個會離開#$%&' – sln

回答

11

你的字符的列表保存包括#-',這是從Unicode U + 0023(在#符號)到U + 0027(在'符號)的範圍內,包括$(U + 0024)。

如果你的意思是#-'被解釋爲三個字符的名單,只是逃避它:

test = test.replaceAll("[^A-Za-z0-9./,#\\-' ]", ""); 

或把它在列表的末尾:

test = test.replaceAll("[^A-Za-z0-9./,#' -]", ""); 
7

因爲您必須將-作爲角色等級中的最後一個字符。

嘗試

test.replaceAll("[^A-Za-z0-9./,#' -]", ""); 

它會工作:)

參見In a java regex, how can I get a character class e.g. [a-z] to match a - minus sign?

Pattern(按Ctrl-F 「字符類」)

注意的Javadoc一個字符類中的一組元字符不同於一個字符呃類。例如,正則表達式。在一個字符類中失去其特殊含義,而表達式 - 成爲一個範圍形成元字符。