String filter = "a-zA-Z0-9äöüÄÖÜß-\\.";
"^[^" + filter + "]*$", ""
inputtext.replaceAll("^[^" + filter + "]*$", "");
这个Java RegEx过滤器应该从inputtext中删除除过滤器中的字符之外的所有字符,但是我得到一个异常,说明不允许使用该点。我已经用两个斜线逃脱了点。 怎么了?
答案 0 :(得分:7)
将-
移至结尾:
String filter = "a-zA-Z0-9äöüÄÖÜß.-";
短划线表示字符范围,点不是范围的有效结尾。您也不想在那里定义范围。将它移到最后可以解决问题。
顺便说一下。如果要删除与过滤器不匹配的所有字符,则需要更改替换:
inputtext = inputtext.replaceAll("[^" + filter + "]", "");
你拥有它的方式,它只会在所有字符都不属于该类时才会被替换。
答案 1 :(得分:1)
以下对我来说很好:
String str = "afjlajfdl;f2.3232A,&^%DFDF-";
System.out.println(str.replaceAll("[^a-zA-Z0-9-.]", ""));
并产生输出:
afjlajfdlf2.3232ADFDF-
通常,您不应将.
转换为[]
,对于替换模式,您不应指定字符串(^,$)的开头和结尾以及多路复用器*
。
答案 2 :(得分:1)
问题不在于你的正则表达式中的句号(点),而是前面的减号。如果你也逃避了这一点,事情会更好:
String filter = "a-zA-Z0-9äöüÄÖÜß\\-\\.";
旁注:我不确定使用正则表达式中使用的第一个也是最后一个字符是否具有所需的效果。也许你应该删除它们?