Java正则表达式-非法字符点

Java正则表达式-非法字符点,java,regex,string,Java,Regex,String,这个Java正则表达式过滤器应该从inputtext中删除除过滤器中的字符以外的所有字符,但我得到一个异常,即不允许使用点。我已经用两条斜线避开了圆点。 有什么问题吗?将-移到末尾: String filter = "a-zA-Z0-9äöüÄÖÜß-\\."; "^[^" + filter + "]*$", "" inputtext.replaceAll("^[^" + filter + "]*$", ""); 破折号表示字符范围,而点不是范围的有效端点。您也不希望在此处定义范围。将其移动

这个Java正则表达式过滤器应该从inputtext中删除除过滤器中的字符以外的所有字符,但我得到一个异常,即不允许使用点。我已经用两条斜线避开了圆点。
有什么问题吗?

-
移到末尾:

String filter = "a-zA-Z0-9äöüÄÖÜß-\\.";
"^[^" + filter + "]*$", ""

inputtext.replaceAll("^[^" + filter + "]*$", "");
破折号表示字符范围,而点不是范围的有效端点。您也不希望在此处定义范围。将其移动到末端可以解决问题

顺便说一句,如果要删除所有与筛选器不匹配的字符,则需要更改替换:

String filter = "a-zA-Z0-9äöüÄÖÜß.-";

按照您的方式,只有当所有字符都不在该类中时,它才会被替换。

以下内容适合我:

inputtext = inputtext.replaceAll("[^" + filter + "]", "");
并产生产出:

    String str = "afjlajfdl;f2.3232A,&^%DFDF-";
    System.out.println(str.replaceAll("[^a-zA-Z0-9-.]", ""));

通常,您不应将
转义到
[]
中,对于替换模式,您不应指定字符串的开始和结束(^,$)以及多路复用器
*

问题不在于正则表达式中的句号,而在于它前面的减号。如果你也摆脱了这一点,事情会变得更好:

afjlajfdlf2.3232ADFDF-

另一方面:我不确定在正则表达式中使用的第一个和最后一个字符是否达到预期效果。也许您应该删除它们?

仅供参考,您不需要在字符类中转义一个点。来自javadoc:“例如,正则表达式。在字符类中失去了它的特殊意义,而表达式-变成了一个范围形成元字符。”但是,正如其他人指出的,是范围元字符导致了真正的问题。你不需要在范围中转义点<代码>“a-zA-Z0-9äöüÄäÜß\\\-”可以正常工作。
String filter = "a-zA-Z0-9äöüÄÖÜß\\-\\.";