2013-04-25 3 views
0

По существу мне нужно написать строковый метод, который получает два строковых аргумента и заменяет каждый символ, который существует во второй строке с «» в первом. Например, первые String toBeFixed = "I have a wonderful AMD CPU. I also like cheese." и второй String toReplaceWith ="oils". The string returned would be "I have a wnderfu AMD CPU. I a ke cheee."Замена символов в строке с каждым символом из другого строка

Вот что я получил:

public class removeChars 
{ 
    public static String removeChars(String str, String remove) 
     { 
      String fixed = str.replaceAll(remove,""); 

      return(fixed); 
     } 

} 

Я не уверен, если это непонимание того, как метод replaceAll используется, как я видел такие вещи, как

str = str.replaceAll("[aeiou]", ""); 

В идеале я бы нашел способ бросить свою вторую строку (remove), а затем сделать с ней, но я не уверен, что это возможно. Я чувствую, что это немного более сложная проблема ... Я не знаком с Array Lists, и кажется, что неизменность строк может вызвать некоторые проблемы для меня.

Этот метод должен иметь возможность обрабатывать строки любого введенного значения. Любая помощь или руководство были бы очень оценены!

ответ

1

String.replaceAll принимает утверждение Regex в качестве первого аргумента. Соответствующий "oils" будет соответствовать именно фразе «масла».

Вместо этого у вас была правильная идея в вашем посте. Согласование "["+remove+"]" будет делать трюк, если ваша строка удаления не содержит зарезервированных символов регулярных выражений, таких как скобки, периоды и т. Д. (Я не уверен в повторяющихся символах.)

Если это так, то сначала отфильтруйте удаление строка.

+0

работы, как мне нужно было. Спасибо, я не уверен, что понимаю, почему этот синтаксис работает. Какую цель здесь выполняет конкатенация? – supertommy

+0

Как я уже сказал, 'replaceAll' принимает в качестве входного выражения выражение [регулярное выражение] (http://www.regular-expressions.info/java.html) (regex). Синтаксис Regex таков, что скобки обозначают возможный набор символов - любой другой набор немодифицированных символов является литералом. Эта ссылка заслуживает хорошего чтения. Regex является мощным и полезным. – Zyerah

0

Это должно сработать. replace работает так же, как replaceAll - только со значениями, а не регулярное выражение

public class removeChars { 
    public static String removeChars(String str, String remove) { 
     String fixed = str; 

     for(int index = 0; index < remove.length; index++) { 
      fixed = fixed.replace(remove.substring(index, index+1), ""); 
      // this replaces all appearances of every single letter of remove in str 
     } 

     return(fixed); 
    } 
} 
1

Может быть, не самое эффективное решение, но это просто:

public class removeChars { 
    public static String removeChars(String str, String remove) { 
     String fixed = str; 

     for(int i = 0; i < remove.length(); i++) 
      fixed = fixed.replaceAll(remove.charAt(i)+"",""); 

     return fixed; 
    } 
} 
Смежные вопросы