我对编码很新,似乎无法返回任何东西。我需要将大写字符转换为小写字母,反之亦然。这是我的代码:
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方法,因为我的任务要求它。
答案 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
)并将其返回。