2014-08-27 4 views
0

Я уже сделал весь код для этого, но у меня есть некоторые проблемы. Не все недопустимые символы удаляются, но я не смог получить шаблон. Я уже давно пытаюсь понять, что вызывает это, и я наконец решил попросить вас, ребята, посмотреть, сможет ли кто-нибудь понять это.Выполнение кода для очистки строки нежелательных символов

Вот полукокс массив действительных символов (Все остальные символы будут удалены из строки):

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(); 
} 
+1

Что такое exmaple input-output, который не работает? –

+0

@Pshemo Изменил это, я имел в виду действительный, извините. – vedi0boy

ответ

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(); 
} 

UPDATE Кулак я думаю, что это C# и я написал C# код, но теперь я изменил его java

+2

Ум ..., этот вопрос отмечен Java. В Java массивы не имеют метода «Содержит», а строки не имеют доступа к индексу. –

+0

текст [i] для меня тоже новый –

+0

Да нет метода содержит. Кроме того, вместо текста [i] я использовал text.charAt (i). Есть ли у кого-нибудь идеи? – vedi0boy

2

Возможно, подумайте об использовании regular expressions который. Regex, который будет соответствовать всем символам в диапазоне a-z, а все цифры 0-9 могут выглядеть как [a-zA-Z0-9]. Regex, который будет соответствовать всем символам, кроме упоминалось выше, может выглядеть [^a-zA-Z0-9] так что ваш код может выглядеть

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

В случае, если вы хотите также, чтобы пробелы или любые другие символы остаться вы можете добавить их к этому character class и изменить оператор возврата до text.replaceAll("[^a-zA-Z0-9\\s]",""); (\\s представляет собой пробелы).

+0

Спасибо за ваш ответ, но я пошел с другим. Это может быть полезно и в будущем! – vedi0boy

+0

@ vedi0boy Нет проблем :) – Pshemo

Смежные вопросы