我编写了一个带有字符串参数的代码,并返回通过以下方式更改字符大写的结果:
这是我的代码:
public class Simple {
public char ChangeCase() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter an input String: ");
String inputString = scanner.nextLine();
//String isVowel = "aeiou";
char c='\0';
for (int i = 0; i < inputString.length(); i++) {
c = inputString.charAt(i);
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U') {
c = Character.toLowerCase(c);
System.out.println(c);
}
else if (c=='b'||c=='c'||c=='d'||c=='f'||c=='g'||c=='h'||c=='j'||c=='k'||c=='l'||c=='m'||c=='n'||c=='p'||c=='q'||c=='r'||c=='s'||c=='t'||c=='v'||c=='w'||c=='x'||c=='y'||c=='z'||
c=='B'||c=='C'||c=='D'||c=='F'||c=='G'||c=='H'||c=='J'||c=='K'||c=='L'||c=='M'||c=='N'||c=='P'||c=='Q'||c=='R'||c=='S'||c=='T'||c=='V'||c=='W'||c=='X'||c=='Y'||c=='Z'){
c = inputString.charAt(i);
c =Character.toUpperCase(c);
System.out.println(c);
}
else if(c=='@'||c=='!'||c=='"'||c==' '||c=='!'||c=='"'||c=='#'||c=='$'||c=='%'||c=='&'||c=='('|| c==')'||c=='*'||c=='+'||c==','||c=='-'||c=='.'||c=='/'||c==':'||c==';'||c=='<'||c=='='||c=='>'||c=='?'||c=='['||c==']'||c=='^'||c=='_'||c=='`'||c=='{'||c=='|'||c=='}'||c=='~'||c=='"'){
c=inputString.charAt(i);
c=c;
System.out.println(c);
}
else
c=c;
}
return c;
}
}
亚军类:
public class Runner {
public static void main(String[] args) {
Simple smpl=new Simple();
smpl.ChangeCase();
}
}
我输入你好时得到的结果:
Enter an input String: hello
H
e
L
L
o
预期结果:
HeLLo
我应该更改什么才能获得预期的结果?
答案 0 :(得分:3)
将println
更改为print
,因为println
将始终添加额外的行。
答案 1 :(得分:3)
将println()
更改为print()
以省略输出中的换行符。交换toUpperCase
和toLowerCase
以使代码执行规范所需的操作。
您目前还没有打印其他字符,例如换行符(要求“不得更改任何非字母的字符”)。
摆脱第二个else if
和else
分支,并用
else {
System.out.print(c);
}
还要删除额外的c = inputString.charAt(i);
语句。你只需要第一个。
关于你正在解决的问题,如果我是你,我会使用正则表达式。
无论如何,这里是Simple.java的解决方案,没有正则表达式,并且还应用了其他一些改进:
import java.util.Scanner;
public class Simple {
public void ChangeCase() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter an input String: ");
String inputString = scanner.nextLine();
String vowels = "aeiouAEIOU";
for (char c: inputString.toCharArray()) {
if (vowels.indexOf(c) != -1) { // found vowel
c = Character.toUpperCase(c);
} else if (Character.isLetter(c)) { // must be a consonant
c = Character.toLowerCase(c);
}
System.out.print(c);
}
}
}
答案 2 :(得分:1)
作为第一个首发 - 只需交换
c = Character.toLowerCase(c);
分别在if块中执行toUpperCase()
的其他调用。
您的代码基本上是正确的 - 您只是在错误的地方更改案例。所以简单地“交换”这些电话!当然 - 不要使用println()
- 因为这会打印一条“线” - 意味着它最后添加了一条“新线”。
答案 3 :(得分:0)
只需使用print()方法而不是println(),因为println()总是添加新行。
答案 4 :(得分:0)
首先提供一些更好的代码提示:
这里有一些简单的例子(可以优化):
public class Simple {
public void ChangeCase() {
String resultString;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter an input String: ");
String inputString = scanner.nextLine();
// make alle chars lower-case
resultString = inputString.toLowerCase();
// make vowels upper-case
resultString = uppercaseVowels(resultString);
// print the result or change to return String for main()
System.out.println("Input: " + inputString);
System.out.println("Result: " + resultString);
}
private String uppercaseVowels(String inputString) {
inputString = inputString.replace('a', 'A');
inputString = inputString.replace('e', 'E');
inputString = inputString.replace('i', 'I');
inputString = inputString.replace('o', 'O');
inputString = inputString.replace('u', 'U');
return inputString;
}
}