2011-12-29 3 views
0

Я хочу сделать что-то вроде этого:Pass только допустимые символы в Java

String myString="123EDCBAabcde"; 
myString=myString.passValidChars("ABCDE"); 

now myString is "EDCBA" 

Есть уже функция, которая пропускает только допустимые символы и удаляет другие? Если это не лучший способ сделать это?

С наилучшими пожеланиями.

+0

Что вы хотите на самом деле? –

+0

Я хочу удалить недопустимые символы строки. Но у меня только список допустимых символов. –

ответ

4
myString = myString.replaceAll("[^ABCDE.]+", ""); 
+0

Ты избил меня. :) – st0le

+0

Гораздо медленнее, чем другие способы. Вы должны хотя бы добавить '+' в конец, чтобы сократить количество итераций 'matcher.find()' и 'matcher.appendReplacement'. –

+0

Спасибо Wojtek! Это решение для меня. Для вопросов производительности: мне не нужен этот код, чтобы быть быстрым. –

3

Это триумф для реализации.

  • Начать с пустого StringBuilder.
  • Итерации через каждый шар myString.
  • Если символ содержится в строке правильных символов, добавьте его в StringBuilder.
  • Преобразование StringBuilder в строку.
  • Выполнено.
+0

+1 лучше, чем Regex и O (len (str))) – JohnJohnGa

+0

Спасибо, это то, как я собираюсь реализовать, если нет другого элегантного/готового решения. –

+0

Я не понимаю, как это лучше, чем O (len (str)). Ответ Войтека кажется таким же эффективным, как этот. – hwrdprkns

1
String string = "123EDCBAabcde"; 

Pattern pattern = Pattern.compile("[ABCDE]"); 
Matcher mach = pattern.matcher(string); 

StringBuffer str = new StringBuffer(); 
while(mach.find()){ 
    str.append(mach.group()); 
} 
string = str.toString(); // Now string is "EDCBA" 
0

Pattern.compile("[^A-Z]").matcher(myString).replaceAll("")

0

Связано с @JB Nizet ответить:

static String passValidChar(String in, String validChar){ 
     StringBuilder strBuilder = new StringBuilder(); 
     for(char c : in.toCharArray()){ 
      if(validChar.indexOf(String.valueOf(c)) != -1){ 
       strBuilder.append(c); 
      } 
     } 
     return strBuilder.toString(); 
    } 

    public static void main(String [] args){ 
     System.out.println(passValidChar("123EDCBAabcde", "EDCBA"));  
    } 
Смежные вопросы