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

问题描述 投票:0回答:1

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

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

这是我来自控制器的代码

// 数组中的单词列表

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

//for循环

 `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,但我没有使用。我尝试谷歌,他们的例子也没有显示如何从数组中做到这一点。

java arrays string javafx special-characters
1个回答
0
投票

单弦

选项 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个字符

字符串是不可变的;你无法改变它们。但是您可以根据旧字符串制作new字符串。或者,在这种情况下,更简单,制作一个可变的东西,这样您就可以替换字符(大概您希望在用户正确猜测时用字母替换星星):

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);
}

等等。

© www.soinside.com 2019 - 2024. All rights reserved.