java字符串下划线_关于java:将下划线替换为char或string的有效方法

我已经研究了这个主题一段时间,但没有成功。 我确实找到了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());

}

那么,如果您可以将其用作基础并加以解决,例如进行修复? 或告诉我一些我没有想到的事情。

您的for循环/ charAt代码块有什么问题?

@ZackMacomber,我猜测if条件永远不会满足,因为单击按钮时什么也没发生。 如果用户正确猜到,应该替换字母

这是一个好问题。 显然有重复的代码,因此如何用可重用的代码替换所有代码。 实际上,您可以省去所有代码。

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

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_

通过word.replaceAll,变量" word"代表什么?

您无需像执行操作那样将单词存储为"代码";只需创建一个名为" word"的String变量即可保存用户必须猜测的值。

我觉得您的回答是最有帮助的,您正在做些什么。好的,所以我要使用JLabel.setText(mainword)而不是System.out.print。那行吗?而且我将StringBuilder设置为用户猜测的问题,而不是某些字符

当然-我只是用它来简单地显示它。像现在一样使用mainword和gletter变量。它会工作。您的代码其余部分可以进一步简化,但是麻烦您留给您:)

好的,最后一个问题,我将如何使用单词数组(此子手游戏中使用的单词im)代替它?换句话说,由于String word =" TECHNOLOGY",是否必须制作String word2?

在这种情况下,请使用String[] words; int wordIndex = 5; mainword = words[wordIndex].replaceAll...

@ user1803676是,wordIndex是当前正在播放的单词的索引。例如wordIndex = (int)(Math.random() * words.length);

好消息!它有效,但是一次只能写一封信。因此,对于"苹果"一词,猜测a和值是:a _ _ _ _猜测p和值是:_ p p _ _我希望它是累计的。救命?

@ user1803676,您必须清除猜测或在每个循环中创建一个新对象。我保证它有效-尝试对"apple".replaceAll("[^ap]","_");进行硬编码,您会看到输出为app__

foundword = words[randvalue].replaceAll("[^" + xletters +"]","_");是我在for循环中所拥有的,其中foundword是一个字符串,words [randvalue]是来自我的字符串数组的随机单词,而xletters是用户猜测的字母。而且一次只能处理一个字母。我无法累积

@JavaProdigy xletters必须是到目前为止猜到的所有字母。您需要在其上添加猜中的字母,因此请替换它。 xletters应该在循环外部定义。

xletters被定义为for循环上方的StringBuilder xletters = new StringBuilder(strGuess);。那我会为此使用append()方法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值