在一行中排列字母

时间:2017-10-10 08:53:10

标签: java

我编写了一个带有字符串参数的代码,并返回通过以下方式更改字符大写的结果:

  1. 所有元音必须为大写(元音是a,e,i,o,u)
  2. 所有辅音必须为小写
  3. 任何不是字母的字符都不得更改
  4. 这是我的代码:

    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
    

    我应该更改什么才能获得预期的结果?

5 个答案:

答案 0 :(得分:3)

println更改为print,因为println将始终添加额外的行。

答案 1 :(得分:3)

println()更改为print()以省略输出中的换行符。交换toUpperCasetoLowerCase以使代码执行规范所需的操作。

您目前还没有打印其他字符,例如换行符(要求“不得更改任何非字母的字符”)。 摆脱第二个else ifelse分支,并用

替换它们
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)

首先提供一些更好的代码提示:

  1. Structorize sour code,因此请为每个步骤(IF)使用方法。
  2. 只有1个字母的变量应该是迭代变量,但更好的是只有1个字母的变量。 (c)中
  3. 这里有一些简单的例子(可以优化):

    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;
        }
    }