为了账号安全,请及时绑定邮箱和手机立即绑定

在一个字符串的 for 循环中使用字符串替换方法

在一个字符串的 for 循环中使用字符串替换方法

jeck猫 2022-08-03 15:22:30
我目前正在使用Android Studio 3.2创建一个包含标志猜测游戏的移动应用程序。对于其中一个游戏,我必须显示一个随机标志和相应的名称(用破折号覆盖)。用户可以在下面的编辑文本框中输入一个字母,然后单击提交按钮。如果用户得到正确的答案,则带有该字母的破折号将被删除以显示实际的字母。显示应用 UI 的图像对我来说,问题始于单独更换每个破折号。当我输入一封信并提交它时,所有的破折号都会变成同一个字母。package com.example.anisa.assignment1;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import java.util.Random;public class GuessHints extends AppCompatActivity{    private ImageView flag;    private int randIndex;    public char[] answers = {};    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_guess_hints);        displayHintsFlag();        splitCountryNameLetters();    }    public void displayHintsFlag()    {        flag = findViewById(R.id.displayHintsFlag);        Random r = new Random();        int min = 0;        int max = 255;        randIndex = r.nextInt(max-min) + min;        Country countries = new Country();        int randomHintsFlagImage = countries.countryImages[randIndex];        flag.setImageResource(randomHintsFlagImage);    }    public void splitCountryNameLetters()    {        Country countries = new Country();        String randomHintsFlagName = countries.countryNames[randIndex];        TextView hintsQuestion = (TextView) findViewById(R.id.countryDashesDisplay);        String hintsQuestionString;        int flagNameLength = randomHintsFlagName.length();        char letter;        for (int i = 0; i < flagNameLength; i++)        {            Log.d("Flag: ",randomHintsFlagName + "");我知道问题在于使用k索引,但不知道如何解决这个问题,因为它在for循环中。
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

假设您有一个启动,例如 .

用户输入字母,应该发生的事情是StringItaliai


------ > I---i-

让我们首先将待猜到的版本转换为虚线版本String


final String toBeGuessed = "Italia";                     // Italia

final String dashed = toBeGuessed.replaceAll(".", "-");  // ------

现在,用户以猜测的字母形式输入。我们将其转换为小写字母,以便以后进行比较。i


final char letter = Character.toLowerCase('i');

我们需要做的是更新虚线,为此我们将使用.

使用 a 允许我们设置单个字符。StringStringBuilderStringBuilder


// Create the StringBuilder starting from ------

final StringBuilder sb = new StringBuilder(dashes);


// Loop the String "Italia"

for (int i = 0; i < toBeGuessed.length(); i++) {

    final char toBeGuessedChar = toBeGuessed.charAt(i);


    // Is the character at the index "i" what we are looking for?

    // Remember to transform the character to the same form as the

    // guessed letter, maybe lowercase

    final char c = Character.toLowerCase(toBeGuessedChar);


    if (c == letter) {

        // Yes! Update the StringBuilder

        sb.setCharAt(i, toBeGuessedChar);

    }

}


// Get the final result

final String result = sb.toString();

result将是 .I---i-


查看完整回答
反对 回复 2022-08-03
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

就像在Java中一样,字符串是不可变的,因此您无法用另一个字符串替换任何字符串。


 hintsQuestionString = hintsQuestionString.replace(hintsQuestionString.charAt(k), letterChar);

上面的行在Java中不起作用。


您可以使用 StringBuilder 类来替换字符串

您不必吐出字符串,因为它在Java中不起作用,因为Java中的String类是不可变的。

您只需在文本视图中设置文本即可


你从用户那里得到的这个字符串 String hintsQuestionString = hintsQuestion.getText().toString();


然后使用equals方法比较整个字符串,如果输入的字符串匹配,则必须设置文本。我已经自己获取了 countryName 变量,您必须将此字符串替换为您采用的变量。


if(countryName.equals(hintsQuestionString))

  {

    hintsQuestion.setText(hintsQuestionString);

  }

我希望,这会帮助你。


查看完整回答
反对 回复 2022-08-03
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信