如何将数组中的所有字符串替换为特定的特殊字符

-1 java arrays string javafx special-characters

我正在使用 JavaFX,目前我正在一个项目中,我必须创建刽子手游戏。每当我单击“开始游戏”按钮时,我都会有一个文本字段和一个标签,显示数组中的 1 个单词。因此,每当我单击“开始游戏”时,假设会生成字符串“School”。它将显示在文本字段和标签中。我不想显示实际的字符串,而是想将字符串替换为特殊字符。我希望文本字段显示“ ”,标签显示字符串长度的“_”,因此“学校”在文本字段中为“ *****”,在“_ _ _ _ _ _”中标签。我怎么做?

我的代码是有效的,我只是不知道如何将字符串替换为特殊字符

这是我来自控制器的代码

// 数组中的单词列表

String[] listWords = {"Tuesday", "School", "Dog", "Vehicle", 
             "Bird", "Book", "Recipe", "Sun", "Hammer", "Orange"};
Run Code Online (Sandbox Code Playgroud)

//for循环

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

我尝试关注 YouTube 上的一堆视频,但没有一个显示一串数组。他们中的大多数都使用 ArrayList 或 List,但我没有使用。我尝试谷歌搜索,他们的示例也没有显示如何从数组中执行此操作。

rzw*_*oot 5

单弦

选项 1:仅创建一个

它是一种编程语言,而不是助手。有时你必须稍微创造性地思考才能完成工作。与其“替换每个字符”,为什么不直接创建一个新字符串呢?你知道长度..

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

选项 2:正则表达式

replaceAll接受正则表达式,这是一种小型编程语言,与 java 的文本匹配非常不同;它只对常规语法有用(例如,你不能用它解析 java 代码),但这非常简单。.是“任何字符”的正则表达式。因此:

public static String starred(String input) {
  return input.replaceAll(".", "*");
}
Run Code Online (Sandbox Code Playgroud)

所有字符串

这似乎不对 - 用星号替换该字符串数组会破坏单词,并且您需要它们知道用户是否输入了正确的字母。您希望从可能的单词数组中获取 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);
}
Run Code Online (Sandbox Code Playgroud)

等等。