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

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

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

jeck猫 2022-07-27 21:39:13
我目前正在使用 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);    }我知道问题在于使用 k 索引,但不确定如何解决这个问题,因为它在 for 循环中。
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

假设您有一个开始String,例如Italia.

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


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

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


final String toBeGuessed = "Italia";                     // Italia

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

现在用户输入i一个猜测的字母。我们将其转换为小写以供以后比较。


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

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

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


// 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();


查看完整回答
反对 回复 2022-07-27
?
弑天下

TA贡献1818条经验 获得超8个赞

由于在 Java 中字符串是不可变的,因此您不能用另一个字符串替换任何字符串。

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

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

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

或者

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

您可以简单地在 TextView 中设置文本

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

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

if(countryName.equals(hintsQuestionString))
  {
    hintsQuestion.setText(hintsQuestionString);
  }

我希望这能帮到您。



查看完整回答
反对 回复 2022-07-27
  • 2 回答
  • 0 关注
  • 237 浏览

添加回答

举报

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