使代码清理不需要的字符串

时间:2014-08-27 19:29:10

标签: java string char character stringbuilder

我已经为它制作了所有代码,但我有一些问题。并非所有无效字符都被删除,但我无法拾取模式。我现在已经尝试了很长时间才弄清楚导致这种情况的原因,最后我决定让你们看看有人能搞清楚。

这是有效字符的char数组(所有其他字符将从字符串中删除):

static char[] validCharsUsername ={'Q','q','W','w','E','e','R','r','T','t','Y','y','U','u','I','i','O','o','P','p','A','a','S','s','D','d','F','f','G','g','H','h','J','j','K','k','L','l','Z','z','X','x','C','c','V','v','B','b','N','n','M','m','1','2','3','4','5','6','7','8','9','0','_','-'};

这是代码。 (this.validChars引用数组):

public String cleanString(String text){
    StringBuilder sb = new StringBuilder(text);
    for(int i = 0;i < sb.length() - 1;i++){
        char character = sb.charAt(i);
        int index = 0;
        char indexChar = this.validChars[0];
        boolean valid = false;
        while(index < this.validChars.length - 1){
            index++;
            indexChar = this.validChars[index];
            if(character == indexChar){
                valid = true;
                index = this.validChars.length;
            }   
        }
        if(!valid){
            if(character == ' '){
                sb.deleteCharAt(i);
                sb.insert(i, '_');
            }else{
                sb.deleteCharAt(i);
            }
            i = 0;
        }
    }
    return sb.toString();
}

2 个答案:

答案 0 :(得分:2)

也许考虑使用regular expressions。匹配范围a-z和所有数字0-9中的所有字符的正则表达式看起来像[a-zA-Z0-9]。除了前面提到的所有字符都匹配的正则表达式看起来像[^a-zA-Z0-9]所以你的代码看起来像

public String cleanString(String text){
    return text.replaceAll("[^a-zA-Z0-9]","");
}

如果您还想让空格或任何其他字符保留,可以将它们添加到此character class并将return语句更改为text.replaceAll("[^a-zA-Z0-9\\s]","");\\s表示空格)。

答案 1 :(得分:1)

尝试使用此代码:

public static String cleanString(String text){
    StringBuilder sb = new StringBuilder("");
    for(int i = 0;i < text.length();i++){
        for (int j = 0; j < validCharsUsername.length; j++) {
            if (validCharsUsername[j] == text.charAt(i)) {
                sb.append(text.charAt(i));
                break;
            }
        }
    }
    return sb.toString();
}

<强>更新 拳头我认为它是C#而且我写了C#Code,但现在我把它改成了java