仅保留字符串中的有效字符

Posted

技术标签:

【中文标题】仅保留字符串中的有效字符【英文标题】:Keep only valid characters in a String 【发布时间】:2022-01-17 19:19:24 【问题描述】:

有没有比我的解决方案更好的方法来从字符串中删除所有非法字符?也许是 lambda 表达式或正则表达式?在这种情况下,我只想保留 0 - 9、A - Z、a - z。

String iban = "DE07 1234 1234 1234 1234 12";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < iban.length(); i++) 
    int val = iban.charAt(i);
    if (    (val >= '0' && val <= '9')          // 0 - 9
            || (val >= 'A' && val <= 'Z')       // A - Z
            || (val >= 'a' && val <= 'z'))     // a - z
        sb.append(val);
    

iban = sb.toString();

【问题讨论】:

定义“更好”:性能更高?更简洁?更具可读性?更兼容? 也许我不需要遍历每个字符 这能回答你的问题吗? Replacing all non-alphanumeric characters with empty strings 【参考方案1】:

它应该只留下字母 a-z、A-Z 和数字 0-9。 基本上使用正则表达式进行替换

iban = iban.replaceAll("[^a-zA-Z0-9]","");

【讨论】:

你可能应该添加一个赋值,因为仅仅调用replaceAll而不使用返回值将没有任何效果。 @VGR 是的,你是对的。我确实纠正了它【参考方案2】:

是的:使用正则表达式:

String iban = "DE07 1234 1234 1234 1234 12";
iban = iban.replaceAll("[^0-9A-Za-z]", "");

【讨论】:

以上是关于仅保留字符串中的有效字符的主要内容,如果未能解决你的问题,请参考以下文章

使用 Access 2016 中的表创建查询时,仅保留长文本字段的前 255 个字符

如何仅针对键的子集有效地比较 C++ 中的两个字符串映射

Typescript 映射类型,其中仅保留可为空的属性并转换为字符串类型

保留字符串中的分隔标记列表[关闭]

使用 gsub 在字符串中仅保留字母数字字符和空格

AS3 |如何删除字母 drom 字符串并仅保留整数