String.replaceAll不适用于任何种类的字符
所以我得到的是这种简单的方法,它应该删除字符串中除大写和小写字母和数字外的所有字符。String.replaceAll不适用于任何种类的字符
public static String toSimple(String arg) //redurziert einen String auf Buchstaben und ganze Zahlen
{
String string = arg;
int i = 0;
while (i < string.length())
{
if (((int)string.charAt(i) >= 48 && (int)string.charAt(i) <= 57)||((int)string.charAt(i) >= 65 && (int)string.charAt(i) <= 90)||((int)string.charAt(i) >= 97 && (int)string.charAt(i) <= 121))
i+=1;
else
{
int a = string.length();
string = string.replaceAll(""+string.charAt(i), "");
if (!(string.length() < a)) //Just in case
{
i+=1;
}
}
的问题是,在某些情况下,虽然达到并给出一个字符string.replaceAll
不会改变任何东西。我在调试器中检查了它,并找不到任何明显的错误或异常。我没有检查整个ASCII表,我知道这个问题会发生在'$''?'和'。'。 任何建议如何解决?
String.replaceAll
将正则表达式作为其第一个参数。
$
,?
和.
是regular expressions中的特殊字符。
改为使用String.replace
- 这实际上也是在内部使用正则表达式,但它正确地转义了字符串。
然而,由于您使用String.replaceAll
,你可以使用正则表达式做这件事:
return arg.replaceAll("[^A-Za-z0-9]", "");
男人,这很容易':D谢谢 –
或'arg.replaceAll(“\\ P {Alnum} +”,“”)' –
@Wiktor确实。我建议明确的范围,因为它符合OP的代码。 –
注意字符文字可用于代替“幻数” - 所以'(int)string.charAt(i)> = 48'可以写成'string.charAt(i)> ='0'',这使得它更加明显。 (在任何情况下都不需要强制转换为int)。 –
这是从字符串中删除字符的一种非常糟糕的方式。它不起作用。试试字符串“,,, + a” - 它不会删除“+”。通常你会在StringBuilder中建立一个新的字符串,但即使你这样做,你也会使用'String.substring'两次来获取字符串前后的字符串。 –