You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX猜单词游戏:如何将数组字符串替换为指定特殊字符

JavaFX 猜单词(Hangman)游戏字符串替换解决方案

需求说明

使用JavaFX开发猜单词游戏,点击「开始游戏」按钮时从字符串数组随机选取单词,需将显示内容替换为:

  • TextField:以<em>开头,后续跟与单词长度一致的*(例:"School"显示为<em>*****)
  • Label:显示带空格的下划线(例:"School"显示为_ _ _ _ _ _)

现有代码

// 字符串数组中的单词列表
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); 
}

解决方案

  1. 保存当前真实单词:在控制器类中添加成员变量存储选中的真实单词,后续猜字母验证等游戏逻辑会用到:
private String currentWord;
  1. 简化随机单词选择逻辑:原循环会重复选多次单词,最终只保留最后一次结果,点击「开始游戏」仅需选一次,去掉冗余循环:
// 随机选中一个单词
currentWord = listWords[(int)(Math.random() * listWords.length)];
  1. 生成TextField显示内容:
    Java 11+可直接用String.repeat()快速生成对应长度的*,拼接<em>前缀:
String textFieldDisplay = "<em>" + "*".repeat(currentWord.length());
TxtField.setText(textFieldDisplay);

Java 11以下版本用StringBuilder构建:

StringBuilder sb = new StringBuilder("<em>");
for (int i = 0; i < currentWord.length(); i++) {
    sb.append("*");
}
TxtField.setText(sb.toString());
  1. 生成Label显示内容:
    用String.join()结合Collections.nCopies()快速生成带空格的下划线字符串:
import java.util.Collections;

String labelDisplay = String.join(" ", Collections.nCopies(currentWord.length(), "_"));
wordLabel.setText(labelDisplay);

或者用StringBuilder手动拼接:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < currentWord.length(); i++) {
    sb.append("_");
    if (i != currentWord.length() - 1) {
        sb.append(" ");
    }
}
wordLabel.setText(sb.toString());

完整修改后的控制器代码片段

import java.util.Collections;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

public class HangmanController {
    @FXML
    private TextField TxtField;
    @FXML
    private Label wordLabel;

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

    @FXML
    private void startGame() {
        // 随机选中单词
        currentWord = listWords[(int)(Math.random() * listWords.length)];
        
        // 设置TextField显示内容
        String textFieldDisplay = "<em>" + "*".repeat(currentWord.length());
        TxtField.setText(textFieldDisplay);
        
        // 设置Label显示内容
        String labelDisplay = String.join(" ", Collections.nCopies(currentWord.length(), "_"));
        wordLabel.setText(labelDisplay);
    }
}

内容的提问来源于stack exchange,提问作者Pektra Mom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:52:17