#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]"