代码之家  ›  专栏  ›  技术社区  ›  Pektra Mom

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

  •  -1
  • Pektra Mom  · 技术社区  · 1 年前

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

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

    这是来自控制器的我的代码

    //数组中的单词列表

    `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。我试着用谷歌搜索,他们的例子也没有显示如何从数组中进行搜索。

    2 回复  |  直到 1 年前
        1
  •  1
  •   Bohemian    1 年前

    假设:

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

    然后用 * :

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

    这将根据猜测构建一个负字符类,例如regex [^abcd] 可以匹配任何字符 a、 b、c或d。

        2
  •  1
  •   rzwitserloot    1 年前

    单个字符串

    选项1:只创建一个

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

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

    选项2:正则表达式

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

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

    所有字符串

    这似乎不对——用星号替换字符串数组会破坏单词,你需要它们知道用户是否输入了正确的字母。你想从你的一系列可能的单词中得到一个单词来玩,然后把它放在身边,并用星星做一个副本。

    通常替换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);
    }
    

    等等

        3
  •  0
  •   NsoundarMCA    1 年前

    这里是使用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);
        }