2014-01-07 4 views
0

Я работаю с методом замены для строк. У меня есть список массивов строк, и я пытаюсь разрешить пользователю выбирать письмо для удаления из массива и письмо, чтобы заменить его. Когда я запускаю программу и после того, как пользователь выбирает заменяемый символ, массив остается неизменным.замена символов в arraylist

Может кто-нибудь объяснить, почему это происходит?

Мой список массивов называется «строки». Часть моего кода, касающаяся функции замены, приведена ниже:

public void letter() { 

      int b; 

      Scanner replaceLetter = new Scanner(System.in); 
      System.out.println ("What letter would you like to remove?"); 
      String badLetter = replaceLetter.next(); 
      System.out.println ("What letter would you like to add?"); 
      String newLetter = replaceLetter.next(); 
      for (b=0; b<strings.size(); b++) { 
        String replaceLetters = strings.get(b); 
        replaceLetters = replaceLetters.replaceAll(badLetter,newLetter); 

      } 
      System.out.print(strings); 

    } 

ответ

1

Необходимо снова вернуть его в ArrayList. Строка неизменна в java.

установить его в существующее положение.

for (b=0; b<strings.size(); b++) { 
    String replaceLetters = strings.get(b); 
    replaceLetters = replaceLetters.replaceAll(badLetter,newLetter); 
    strings.set(b, replaceLetters); 
} 
+1

+1 право и код нужно добавить 'Strings.set (b, replaceLetters) ' –

+0

@SubhrajyotiMajumder да. Отредактировано так. –

2

Все, что вы делаете обновление ссылки на replaceLetters, не заменить строку, которая по указанному индексу в массиве strings. Вы должны добавить строку:

strings.set(b, replaceLetters); 

до конца вашего для цикла:

for (b=0; b<strings.size(); b++) { 
    String replaceLetters = strings.get(b); 
    replaceLetters = replaceLetters.replaceAll(badLetter,newLetter); 
    strings.set(b, replaceLetters); 
} 
0

replaceAll вызова возвращает совершенно новый экземпляр String, который вы не вставляя или заменяющий, в массив ,

1

Эта линия

replaceLetters = replaceLetters.replaceAll(badLetter,newLetter); 

только изменяет значение переменной replaceLetters. Он не возвращает его в массив. Для этого вам нужен метод set класса ArrayList. Добавьте эту строку непосредственно ниже этой.

strings.set(b, replaceLetters); 
0
replaceLetters = replaceLetters.replaceAll(badLetter,newLetter); 

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

strings.set(b, replaceLetters); 
Смежные вопросы