java方法返回修改后的字符串

时间:2013-05-20 20:40:04

标签: java

我正在尝试创建一个接受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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分: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。这与(大约)您想要的输出相匹配。

答案 3 :(得分:-2)

示例中的代码甚至不会编译。

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

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

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

但是'='左侧的表达式不能正确分配值。