for循环的字符替换方法出现问题

时间:2019-04-10 16:32:03

标签: java string for-loop

我正在尝试一种比较两个字符串并将并发字符替换为星号的方法,供初学者练习。 我认为String类中已经存在一些方法可以做到这一点,但是本练习不允许我使用它们。 我试图用for循环来做。这是我的代码:

public void substrings(){

    System.out.println ("Insert string 1 and press Intro");
    String string1 = sc.nextLine();
    System.out.println ("Insert string 2 and press Intro");
    String string2 = sc.nextLine();

    String major;
    String minor;

    if (string1.length() >= string2.length()){
        major = string1;
        minor = string2;
    }
    else{
        major = string2;
        minor = string1;
    }

    char[]replace = new char[major.length()];

    for (int i = 0; i < major.length(); i++){
        for (int j = 0; j < minor.length(); j++){
            if (major.charAt(i) != minor.charAt(j)){
                replace[i] = major.charAt(i);
            }
            else {
                replace[i] = '*';
            }
        }
        System.out.print (replace[i]);
    }
    System.out.print ("\n");
}
public static void main (String[]args){
    Substrings Test = new Substrings();
    Test.substrings();


}}

如果我将five fingers插入为字符串1,并将five插入为字符串2,则会获得以下信息: fiv* fing*rs

当我期望像**** **ng*rs

有人可以告诉我我在做什么错吗?谢谢!

2 个答案:

答案 0 :(得分:1)

*屏蔽后停止循环

for (int i = 0; i < major.length(); i++) {
    for (int j = 0; j < minor.length(); j++) {
        if (major.charAt(i) != minor.charAt(j)) {
            replace[i] = major.charAt(i);
        } else {
            replace[i] = '*';
            break; // here
        }
    }
    System.out.print(replace[i]);
}
System.out.print("\n");

答案 1 :(得分:0)

您永远不会超出内部for循环。因此,当您将system.out.print(replace [I])与5中的e与“五个手指”中的字母进行比较时,始终具有该值。

因此,只要您碰到我相信的else语句,您就希望摆脱内部的for循环。