为什么这不能正常运行?

时间:2014-07-17 16:49:14

标签: java string

所以我已经学习了Java的基础知识,并且我正在练习一些新手项目。我目前在做这个项目: http://codingbat.com/prob/p123384

我不知道为什么我的代码不起作用:

public class main {

    public static void main(String[] args) {
        System.out.println(frontBack("java"));

    }

    public static String frontBack(String str) {

        if (str.length() < 1) {
            return str;
        } else if (str.length() >= 2) {

            char a = str.charAt(0);
            char b = str.charAt(str.length() - 1);

            str.replace(a, b);

        }
        return str;

    }

}

它会运行,但它不会将前面的字符与后面的字符交换。我查看了网站的解决方案,它确实对我有意义..也更简单但为什么我的代码不起作用?另外我不认为我正确使用return关键字...

2 个答案:

答案 0 :(得分:0)

因为你没有用新值设置str。

函数replace返回一个String。

public class main {

    public static void main(String[] args) {
        System.out.println(frontBack("java"));

    }

    public static String frontBack(String str) {

        if (str.length() < 1) {
            return str;
        } else if (str.length() >= 2) {

            char a = str.charAt(0);
            char b = str.charAt(str.length() - 1);

            str = str.replace(a, b);
            //str = str.replace(b, a); maybe you need it 

        }
        return str;

    }

}

答案 1 :(得分:0)

简单地

return b + str.substring(1, str.length() - 1) + a;

str.replace(...)返回一个字符串,所以(即使它是正确的)你将失去返回值。

替换方法替换字符的相干匹配序列,但您需要在两个位置替换不同的值。替换对最后一个字符不好,因为这个字符可能出现在较早的位置,所以你也要替换它。

通常,你还必须考虑str.length()== 1;在这里它恰好通过并返回原始字符串。但最好在代码中明确这一点:

if( str.length() <= 1 ){
    return str;
} else {
    char a = str.charAt(0);
    char b = str.charAt(str.length() - 1);
    return b + str.substring(1, str.length() - 1) + a;
}

记住:一个String对象,一旦设置,就不能通过任何应用它的方法来改变。您可以将新的String对象分配给包含String引用的变量。