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

我目前正在使用 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 循环中。


jeck猫
浏览 238回答 2
2回答

翻阅古今

假设您有一个开始String,例如Italia.用户输入字母i,应该发生的事情是------ > I---i-让我们首先将待猜测的版本String转换为虚线版本final String toBeGuessed = "Italia";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Italiafinal String dashed = toBeGuessed.replaceAll(".", "-");&nbsp; // ------现在用户输入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++) {&nbsp; &nbsp; final char toBeGuessedChar = toBeGuessed.charAt(i);&nbsp; &nbsp; // Is the character at the index "i" what we are looking for?&nbsp; &nbsp; // Remember to transform the character to the same form as the&nbsp; &nbsp; // guessed letter, maybe lowercase&nbsp; &nbsp; final char c = Character.toLowerCase(toBeGuessedChar);&nbsp; &nbsp; if (c == letter) {&nbsp; &nbsp; &nbsp; &nbsp; // Yes! Update the StringBuilder&nbsp; &nbsp; &nbsp; &nbsp; sb.setCharAt(i, toBeGuessedChar);&nbsp; &nbsp; }}// Get the final resultfinal String result = sb.toString();

弑天下

由于在 Java 中字符串是不可变的,因此您不能用另一个字符串替换任何字符串。&nbsp;hintsQuestionString&nbsp;=&nbsp;hintsQuestionString.replace(hintsQuestionString.charAt(k),&nbsp;letterChar);上面的行在 Java 中不起作用。您可以使用 StringBuilder 类来替换字符串或者您不必吐出字符串,因为它在 Java 中不起作用,因为 Java 中的 String 类是不可变的。您可以简单地在 TextView 中设置文本你从用户那里得到的这个字符串 String hintsQuestionString = hintsQuestion.getText().toString();然后使用 equals 方法比较整个字符串,如果输入的字符串匹配,则必须设置文本。我自己取了 countryName 变量,你必须用你取的变量替换这个字符串。if(countryName.equals(hintsQuestionString)) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;hintsQuestion.setText(hintsQuestionString); &nbsp;&nbsp;}我希望这能帮到您。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java