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

Я использую JavaFX, и в настоящее время я работаю над проектом, в котором мне нужно создать игру с палачом. У меня есть текстовое поле и метка, отображающая 1 слово из массива всякий раз, когда я нажимаю кнопку «Начать игру». Итак, всякий раз, когда я нажимаю «Начать игру», скажем, генерируется строка «Школа». Он будет отображаться в текстовом поле и на метке. Вместо того, чтобы показывать фактическую строку, я хотел бы заменить строку специальным символом. Я хотел бы, чтобы текстовое поле показывало '', а метка показывала '_' длины строки, поэтому «Школа» была бы «*****» в текстовом поле и «_ _ _ _ _ _» в Этикетка. Как мне это сделать?

Мой код работает, я просто не знаю, как заменить строку на специальный символ

Это мой код от контроллера

// список слов в массиве

`String[] listWords = {"Tuesday", "School", "Dog", "Vehicle", 
             "Bird", "Book", "Recipe", "Sun", "Hammer", "Orange"};`

// Для цикла

 `for (int i = 0; i < listWords.length; i++) {
     String randomWords = listWords[(int)(Math.random() * listWords.length)];                                   
     TxtField.setText(randomWords);
     wordLabel.setText(randomWords); 
     }`

Я пытался следить за кучей видео с YouTube, но ни одно не показывалось со строкой массива. Большинство из них используют ArrayList или List, которые я не использую. Я пытался гуглить, и их примеры также не показывают, как это сделать из массива.

используйте строку регулярного выражения:: replaceAll

Scary Wombat 22.08.2023 03:22

Я бы посоветовал пройти консольную версию игры. Когда это будет завершено, работайте над графикой.

Old Dog Programmer 22.08.2023 03:46

Не забудьте просмотреть свой пост после отправки, чтобы вы могли отредактировать любые ошибки: блоки кода используют три обратных кавычки, а не четыре.

Mike 'Pomax' Kamermans 22.08.2023 03:48

Учитывая пример кода для ArrayList, вы сможете легко преобразовать пример для использования массива, если вы понимаете массивы и ArrayList. Но List более гибкий, чем массив. Во-первых, размер массива фиксирован, но размер List можно изменить. Вы можете удалять элементы из List, но не из массива. (Отклонение от темы: если у вас есть массив объектов, вы можете установить для элемента значение null, чтобы имитировать удаление. Если у вас есть массив примитивов, для имитации удаления у вас может быть «специальное значение», указывающее индексированный элемент. является недействительным.)

Old Dog Programmer 22.08.2023 03:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Одна строка

Вариант 1. Просто создайте

Это язык программирования, а не помощник. Иногда вам приходится мыслить немного творчески, чтобы выполнить работу. Вместо «замены каждого символа», почему бы просто не создать новую строку? Ты знаешь длину..

public static String starred(String input) {
  char[] starred = new char[input.length()];
  Arrays.fill(starred, '*');
  return new String(starred);
}

Вариант 2: Регулярные выражения

replaceAll принимает регулярное выражение, которое представляет собой мини-язык программирования, совсем не похожий на java для сопоставления текста; это полезно только для обычных грамматик (например, вы не можете анализировать код Java), но это очень просто. . — это регулярное выражение для «любого символа». Таким образом:

public static String starred(String input) {
  return input.replaceAll(".", "*");
}

Все строки

Это кажется неправильным — замена этого строкового массива звездочками уничтожит слова, и вам нужно, чтобы они знали, ввел ли пользователь правильную букву. Вы хотели бы получить 1 слово из вашего набора возможных слов, чтобы поиграть с ним, а затем сохранить его и сделать копию со звездочками.

Обычно заменяет 1 символ

Строки неизменны; вы не можете изменить их. Но вы можете сделать новые струны на основе старых. Или, в этом случае, намного проще, сделайте изменяемую вещь, чтобы вы могли просто заменять символы (предположительно, вы хотите заменить звезды буквами, как пользователь правильно угадает):

List<String> POSSIBLE_WORDS = List.of("Tuesday", "School", ....);
Random rnd = new Random();

String word = POSSIBLE_WORDS.get(rnd.nextInt(POSSIBLE_WORDS.size());
char[] letters = new char[word.length()];
Arrays.fill(letters, '*');
// show to the user

// if user guesses a letter:

char guessedLetter = 'e'; // get user input here.
if (!alreadyGuessed.contains(guessedLetter)) {
  boolean matched = false;
  for (int i = 0; i < word.length(); i++) {
    if (word.charAt(i) == guessedLetter) {
      letters[i] = word.charAt(i);
      matched = true;
    }
  }

  if (!matched) hangALittleMore();
  alreadyGuessed.add(guessedLetter);
}

И так далее.

И мой личный фаворит: используйте хэш-карту.

Mike 'Pomax' Kamermans 22.08.2023 03:48

Извините, иногда немного больше думать не помогает мне. Я только что поступил на программирование 3 месяца назад, и у меня нет знаний в этой области. Но спасибо за вашу помощь. Он должен работать!

Pektra Mom 22.08.2023 04:17
Ответ принят как подходящий

Предполагая:

String guesses; // characters guessed so far
String word; // the word to be guessed

Затем, чтобы замаскировать все неугадываемые символы в слове с помощью *:

String display = word.replaceAll("[^" + guesses + "]", "*"); 

Это создает отрицательный класс символов из догадок, например, регулярное выражение [^abcd] будет соответствовать любому символу, кроме a, b, c или d.

Вот очень простая логика, использующая for,

    String replaceString = "*";
    String[] maskedListWords = new String[listWords.length];
    for (int i=0; i<listWords.length; i++)
    {
        maskedListWords[i] = listWords[i].replaceAll("[a-zA-Z]", replaceString);
    }
    for (String string : maskedListWords)
    {
        System.out.println(string);
    }

Другие вопросы по теме