-8

我正在尝试创建一个接受 2 个字符串作为参数的方法。第一个字符串将是一个短语,第二个字符串也是一个短语。我想要的方法是比较两个字符串以匹配字符。如果字符串 2 具有在字符串 1 中找到的字符,则将字符串 2 的字符实例替换为下划线。

例子:

这是输入:

phrase1 = "String 1"
phrase2 = "Strone 2"

调用输出字符串newPhrase,它将具有从下划线构建的字符串:

newPhrase = "___one 2"

它对我不起作用,我做错了什么。

public class DashedPhrase
{
public static void main(String[] args)
{
    dashedHelp("ABCDE","ABDC");
}

public static String dashedHelp(String phrase1, String phrase2) 
{
    String newPhrase = "_";

    for(int i = 0; i < phrase.length(); i++)
    {
        if(phrase.charAt(i) == phrase2.charAt(i))
        {
            newPhrase.charAt(i) += phrase2.charAt(i);
        }

    }

    System.out.print(newPhrase);
    return newPhrase;
}
}
4

4 回答 4

2

为了让你更容易理解,你可以使用StringBuilder和它的方法setCharAt()

注意循环i < phrase1.length() && i < phrase2.length()的条件。for这是为了确保您不会遇到任何ArrayIndexOutOfBounds异常。

public static void main(String[] args)
{
    System.out.println("ABCDE");
    System.out.println("ABDC");
    dashedHelp("ABCDE","ABDC");
    System.out.println();
    System.out.println();
    System.out.println("String 1");
    System.out.println("Strone 2");
    String phrase1 = "String 1";
    String phrase2 = "Strone 2";
    dashedHelp(phrase1, phrase2);
}

public static String dashedHelp(String phrase1, String phrase2) 
{
    StringBuilder newPhrase = new StringBuilder(phrase1);
    for(int i = 0; i < phrase1.length() && i < phrase2.length(); i++)
    {
        if(phrase1.charAt(i) == phrase2.charAt(i))
        {
            newPhrase.setCharAt(i, '_');
        }
    }
    System.out.print(newPhrase);
    return newPhrase.toString();
}

输出:

ABCDE
ABDC
__CDE

String 1
Strone 2
___i_g_1
于 2013-05-20T20:46:37.940 回答
0

newPhrase.charAt(i)不允许你替换一个字符,它只是返回它。Java 的字符串是不可变的。我想改变它,你应该使用StringBuilder。看看replace(int start, int end, String str)方法。

于 2013-05-20T20:44:28.653 回答
0

由于您需要返回与 具有相同长度的字符串,因此phrase2您需要遍历 的每个字符phrase2,并替换两个短语的匹配字符。而且,当然,如果phrase2比 长phrase1,您需要在答案中包含剩余的字符。你可以试试这个:

public static String dashedHelp(String phrase1, String phrase2) {
    String ans = "";
    String subChar = "_";
    int i;
    for(i = 0; i<phrase2.length(); i++) {
        if(i<phrase1.length() && phrase1.charAt(i) == phrase2.charAt(i))
            ans += subChar;
        else
            ans += phrase2.charAt(i);
    }
    return ans;
}

希望能帮助到你


当然,如果你需要在相同字符phrase1的地方用下划线输出,你可以在上面的代码phrase2中互换。phrase2phrase1


测试它

完整的类如下所示:

public class MyClass {
    public static String dashedHelp(String phrase1, String phrase2) {
        // The method code goes here
    }
    public static void main(String[] args) {
        System.out.println(dashedHelp("String 1", "Strone 2"));
    }
}

这个程序的输出是___o_e_2。这(大约)匹配您想要的输出。

于 2013-05-20T20:52:42.677 回答
-2

示例中的代码甚至无法编译。

newPhrase.charAt(i) += phrase2.charAt(i);

这是一个糟糕的任务。这和写作一样

newPhrase.charAt(i) = newPhrase.charAt(i) + phrase2.charAt(i);

但是'='左侧的表达式不是您可以正确分配值的东西。

于 2013-05-20T20:44:54.567 回答