java - 用字符或字符串替换下划线的有效方法

标签 java replace append stringbuilder

我已经研究了一段时间这个话题,但没有太大的成功。我确实找到了 StringBuilder 并且它产生了奇迹,但就我所知。以下是我如何让我的刽子手程序正常工作:

  if(strGuess.equalsIgnoreCase("t")){
        mainword.replace(0,1,"T");
        gletters.append('T');      
    }
        else if(strGuess.equalsIgnoreCase("e")){
        mainword.replace(1,2,"E");
        gletters.append('E');       
    }
        else if(strGuess.equalsIgnoreCase("c")){
        mainword.replace(2,3,"C");
        gletters.append('C');         
    }
        else if(strGuess.equalsIgnoreCase("h")){
        mainword.replace(3,4,"H");
        gletters.append('H');      
    }
        else if(strGuess.equalsIgnoreCase("n")){
        mainword.replace(4,5,"N");
        gletters.append('N');      
    }
        else if(strGuess.equalsIgnoreCase("o")){
        mainword.replace(5,6,"O");
        mainword.replace(7,8,"O");
        gletters.append('O');       
    }
        else if(strGuess.equalsIgnoreCase("l")){
        mainword.replace(6,7,"L");
        gletters.append('L');       
    }
         else if(strGuess.equalsIgnoreCase("g")){
        mainword.replace(8,9,"G");
        gletters.append('G');      
    }
        else if(strGuess.equalsIgnoreCase("y")){
        mainword.replace(9,10,"Y");
        gletters.append('Y'); 
    }
        else{
        JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word!");
        errors++;
        gletters.append(strGuess.toUpperCase());
    }
        SetMain = mainword.toString();
        GuessedLetters = gletters.toString();
        WordLabel.setText(SetMain);
        GuessedLabel.setText(GuessedLetters);
        GuessText.setText(null);
        GuessText.requestFocusInWindow();

但是,我不能对每个单词的每个字母都这样做,那么有没有简单有效的方法来做到这一点?我想要的是有某种循环,这样我就只需要对任何单词使用一次。所以这个词可以是技术(就像上面那样)或苹果或泡菜或圣诞节或你好或其他任何东西。

我尝试过使用 for 循环,我觉得答案就在于此。如果有人可以解释 charAt() 方法以及如何/在何处使用它,那就太好了。我最接近提高效率的是:

for(i = 0; i < GuessWord.length(); i++) { 
    if (GuessWord.charAt(i) == guess2) { 
        mainword.replace(i,i,strGuess.toUpperCase()); 
    }

那么,如果您可以以此为基础并摆脱它,比如修复它?或者告诉我一些我没有想到的事情。

最佳答案

这是个好问题。显然有重复的代码,那么如何用可重用的东西替换所有这些代码。实际上,您可以省去所有代码。

整个代码块可以只用一行替换(适用于每个单词)!

String word = "TECHNOLOGY"; // This is the word the user must guess
mainword = word.replaceAll("[^" + gletters + "]", "_");

这使用 replaceAll()正则表达式表示“任何尚未猜到的字母”,并将其替换为下划线字符 “_”。请注意,字符串是不可变的,replaceAll() 方法返回修改后的字符串 - 它不会修改调用的字符串。

这里有一些测试代码来展示它的实际效果:

public static void main(String[] args) {
    String word = "TECHNOLOGY"; // what the user must guess
    StringBuilder gletters = new StringBuilder("GOTCHA"); // letters guessed
    String mainword = word.replaceAll("[^" + gletters + "]", "_");
    System.out.println(mainword);
}

输出:

T_CH_O_OG_

关于java - 用字符或字符串替换下划线的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13256283/

相关文章:

java - Java 中的 .class 到底返回了什么?

Java:构造函数和传递变量时出错

replace - 如何通过标签管理器在特定位置注入(inject) HTML?

regex - 删除 3 个特定字符,如果存在于字符串 VB.net 的开头

Javascript 反向字母表

c# - 尝试在 foreach 循环中将对象 append 到 Enumerable

JavaScript - 将元素节点 append 到文本节点父级

java - 我可以根据枚举来限定注入(inject)吗?

java - (Android) 使用 HttpUrlConnection 编写 curl POST 命令

c - 如何在 C 语言中将字符 append 到字符串文字