有什么方法可以使这个简单的程序更有效?

时间:2018-11-05 16:13:24

标签: java computer-science

该程序非常简单:它需要一个字符串,并将元音替换为“ _”,然后打印反转的字符串。我只是在寻找使我的代码更专业的方法,并需要一些技巧。

import java.util.Scanner;

public class reverse_string {

    public static void main (String[] args){

        Scanner scan = new Scanner(System.in);

        String input, reverseInput;
        String legolas = new String();

        System.out.println("Enter any input");

        input = scan.nextLine();

        StringBuilder newString = new StringBuilder(input);

        System.out.println("The data you entered is: "+input);

        for (int i =0; i <input.length();i++){

            if (testIfVowel(input.charAt(i))){
                newString.setCharAt(i,'_');
            }
            else{
                newString.setCharAt(i, input.charAt(i));
            }

        }
        for(int i = input.length()-1;i>=0;i--){
            legolas = legolas +input.charAt(i);
        }

        reverseInput=reverseOrder(newString);

        System.out.println("Your old data was: "+input+"\nYour new data is: "+newString +"\nYour old data in reverse is: "+legolas+"\nYour new data in reverse is: "+ reverseInput);

    }



    public static boolean testIfVowel(char x){
        if(x =='a'||x=='A'||x=='e'||x=='E'||x=='i'||x=='I'||x=='o'||x=='O'||x=='u'||x=='U'){
            return true;
        }
        else{
            return false;
        }
    }

    public static String reverseOrder(StringBuilder x){

        String string= new String();

        for(int i = x.length()-1;i>=0;i--){

            string = string + x.charAt(i);
        }

        return string;
    }
}

3 个答案:

答案 0 :(得分:2)

由于您只用_替换了元音,所以为什么不使用为您提供的replaceAll方法Java来匹配一些与元音匹配的正则表达式。

str.replaceAll("[aeiou]", "_");

并使用

反转
reverseInput = new StringBuilder(str).reverse().toString()

这就是改进后的最终代码的外观

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    String input, reverseInput;
    System.out.println("Enter any input");
    input = scan.nextLine();
    reverseInput = new StringBuilder(input).reverse().toString();
    String withoutVowels = input.replaceAll("[aeiou]", "_");
    String withoutVowelsReversed = new StringBuilder(withoutVowels).reverse().toString();
    System.out.println("The data you entered is: " + input);
    System.out.println("Your old data was: " + input + "\nYour new data is: " + withoutVowels + "\nYour old data in reverse is: " + reverseInput + "\nYour new data in reverse is: " + withoutVowelsReversed);
}

答案 1 :(得分:0)

我建议您的逻辑不必要地复杂。例如,您是否真的需要只使用一次 次的testIfVowel方法?我对此表示怀疑。

我会做这样的事情(伪代码):

resultString = '';
for (i = 0; i < length(s); i++) {
  if ("AEIOUaeiou".indexOf(s[i]) != 0) {
    resultString = '_' + resultString;
  } else {
    resultString = s[i] + resultString;
  }
}

(您可以使用任何一种语言来完成此操作。)

请注意,元音测试现在变得简单明了,显然适用于大写和小写版本。而且,只需在最初为空的resultString的 front 处插入新字符,即可一次创建一个字符,从而创建“反向字符串”。

对我而言,也许最重要的是,该版本“非常容易阅读”。我不必查看太多代码即可对其进行检查。如果可以的话,它“直指重点”。

我觉得更干净...

答案 2 :(得分:0)

这似乎并不比以下任何一项都要困难:

gcloud container clusters create 148374ed-92b0-4088-9623-c22c5aee3 \
    --num-nodes 3 \
    --enable-autorepair \
    --cluster-version 1.11.2-gke.9 \
    --scopes storage-ro \
    --zone us-central1-a
相关问题