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