Как заменить все символы в строке пользовательского ввода, кроме одного

#java #character #replace

#java #символ #заменить

Вопрос:

В настоящее время я нахожусь в классе Java начального уровня и работаю над классическим назначением угадывания фразы. Цель состоит в том, чтобы один пользователь вводил секретную фразу, а другой угадывал ее по одной букве за раз. Между догадками фраза должна отображаться как все вопросительные знаки, кроме букв, которые были угаданы правильно. До этого момента в нашем классе были рассмотрены только некоторые очень простые методы, операторы if-else и циклы, но я пытаюсь исследовать некоторые строковые методы, которые могут немного упростить задачу.

Я знаю о методах replace() replaceAll() и contains() , но мне было интересно, существует ли метод, который позволяет вам заменять все символы, кроме одного, по вашему выбору, в строке.

Заранее спасибо

Ответ №1:

Самый простой способ, вероятно, использовать String.replaceAll() :

 String out = str.replaceAll("[^a]", "?");
 

При этом все буквы останутся a нетронутыми, а все остальные символы будут заменены вопросительными знаками.

Это может быть легко расширено до нескольких символов, например, так:

 String out = str.replaceAll("[^aeo]", "?");
 

Это сохранит все буквы a e o и заменит все остальное.

Комментарии:

1. Потрясающе, большое спасибо, в этом есть смысл. Теперь, могу ли я сослаться на другую строку (скажем, строку, в которой хранится предположение пользователя о символе, который может содержать строка) в этом регулярном выражении, которое исключает символы? Или что-то подобное требует более транзитивного подхода?

2. @user1019310: Вы можете создать регулярное выражение «на лету»: "[^" chars "]" , где chars находится строка, содержащая символы, которые вы хотите исключить.

3. ^^^ Идеально, это абсолютно то, что мне нужно. Большое спасибо всем за помощь. Я опубликую сообщение, если столкнусь с еще какими-нибудь стенами.

4. Еще один, как мне исключить пробелы из заменяемых символов?

5. @user1019310: просто добавьте их в регулярное выражение, как и любой другой символ, например "[^ aeo]"