有什么方法可以使这个简单的程序更有效率吗?
Are there any ways to make this simple program more efficient?
该程序非常简单:它接受一个字符串并将元音替换为“_”,然后打印反转后的字符串。我正在寻找使我的代码更专业的方法,并希望得到一些提示。
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;
}
}
既然您只是用 _
替换元音,为什么不使用 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);
}
我认为您的逻辑不必要地复杂。例如,您真的需要只使用 一次 次的 testIfVowel
方法吗?我怀疑。
我会做这样的事情(伪代码):
resultString = '';
for (i = 0; i < length(s); i++) {
if ("AEIOUaeiou".indexOf(s[i]) != 0) {
resultString = '_' + resultString;
} else {
resultString = s[i] + resultString;
}
}
(你可以用任何语言来做。)
请注意元音测试现在变得简单明了,显然适用于大写和小写版本。并且,如何创建 "reversed string",一次一个字符,只需将新字符插入初始为空的 resultString 的 前面 。
也许(对我而言)最重要的是,这个版本 "reads very easily." 我不需要查看太多代码来桌面检查它是否可以工作。它,如果你愿意,"gets straight to the point."
我觉得干净多了...
这似乎不需要比以下更难:
String result =
new StringBuilder(input.replaceAll("[AEIOUaeiou]", "_"))
.reverse()
.toString();
该程序非常简单:它接受一个字符串并将元音替换为“_”,然后打印反转后的字符串。我正在寻找使我的代码更专业的方法,并希望得到一些提示。
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;
}
}
既然您只是用 _
替换元音,为什么不使用 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);
}
我认为您的逻辑不必要地复杂。例如,您真的需要只使用 一次 次的 testIfVowel
方法吗?我怀疑。
我会做这样的事情(伪代码):
resultString = '';
for (i = 0; i < length(s); i++) {
if ("AEIOUaeiou".indexOf(s[i]) != 0) {
resultString = '_' + resultString;
} else {
resultString = s[i] + resultString;
}
}
(你可以用任何语言来做。)
请注意元音测试现在变得简单明了,显然适用于大写和小写版本。并且,如何创建 "reversed string",一次一个字符,只需将新字符插入初始为空的 resultString 的 前面 。
也许(对我而言)最重要的是,这个版本 "reads very easily." 我不需要查看太多代码来桌面检查它是否可以工作。它,如果你愿意,"gets straight to the point."
我觉得干净多了...
这似乎不需要比以下更难:
String result =
new StringBuilder(input.replaceAll("[AEIOUaeiou]", "_"))
.reverse()
.toString();