无法在公共静态字符串(Java)中返回语句

时间:2016-10-29 09:44:09

标签: java string return

我对编码很新,似乎无法返回任何东西。我需要将大写字符转换为小写字母,反之亦然。这是我的代码:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    invString(str);
    sc.close();

}

private static String invString(String str) {
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        if (ch > 97) {
            ch = Character.toUpperCase(ch);
            return str;
        } else {
            ch = Character.toLowerCase(ch);
            return str;
        }
    }
    return null;
}

我做错了什么? (在返回方面,代码尚未完成)

EDIT ****************

感谢有用的评论,因为我知道我没有存储我的修改的地方,所以我添加了String res = "";并继续将值添加到String res但最后,当返回时res,我仍然没有得到任何输出......这就是整个事情:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    String st = invString(str);
    sc.close();

}

private static String invString(String str) {
    String res = "";
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);

        if (65 <= ch && ch <= 90) {
            ch += 32;
            res += ch;

        } else if (97 <= ch && ch <= 122) {
            ch -= 32;
            res += ch;
        }


    }

    return res;
}

PS。我没有使用ready方法,因为我的任务要求它。

3 个答案:

答案 0 :(得分:1)

你返回str对象而根本没有更新它。 您应该生成一个新字符串,其中放置您反转案例的字符。 检查最后的答案 How can I invert the case of a String in Java?

答案 1 :(得分:1)

您的代码中存在许多缺陷。首先,您尝试在每个str语句中返回原始字符串if。那么发生的是方法invString( String )只返回作为参数传递的原始字符串。相反,您应该继续将字符添加到新的String变量中(如@Massimo所述)。此外,您最终将返回null。甚至为什么这样做?您可能希望返回新的String变量。

private static String invString(String str) {

    String s=""; //new String variable
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        if (ch > 97) {
            ch = Character.toUpperCase(ch);
            s+=ch; //do this instead of returning str
        } else {
            ch = Character.toLowerCase(ch);
            s+=ch; //same here
        }
    }
    return s; //return the new String
}

其次,在main方法中,简单地调用方法是错误的,因为它返回一个值。您应该将invString()返回的值赋给String变量。

public static void main(String[] args){
    ...
    String st = invString(str); //st stores the value of str with 
                                //letters' cases changed
}

答案 2 :(得分:-1)

如果要使用反向字符串,则需要实际使用返回的值,例如:

str = invString (str)

字符串是不可变的,因此您无法更改其中的字符。您只能用新字符串替换字符串变量。

修改您正在访问的字符不会影响字符串。您需要构建一个新字符串(查找StringBuilder)并将其返回。