这是我的代码,我希望用户输入单词或短语,然后用户可以删除所有字符,删除单个字符,用另一个字符替换字符并反转字符。
每个单独的功能都可以自己工作,但是当我把它放在while循环中时,我打印出的字符串与用户的输入相同。
基本上字符串中的函数不起作用。我不知道我的代码有什么问题。
如果有人可以测试代码那么循环有点搞砸了我,这真的太棒了!
import java.util.Scanner;
public class StringFun {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int counter;
String str, str1;
boolean play=true;
System.out.println("Enter the string to be manipulated:");
str=scan.nextLine();
while(play==true){
System.out.println("Enter your command (quit, print reverse, replace all, replace single, remove");
str1= scan.nextLine();
if(str1.equalsIgnoreCase("print reverse"))
{
String reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter a string to reverse");
String s=scan.nextLine().trim();
int length = s.length();
for ( int i = length - 1 ; i >= 0 ; i-- )
reverse = reverse + s.charAt(i);
}
else if(str1.equalsIgnoreCase("replace all"))
{
System.out.println("Enter the character to replace");
String s=scan.nextLine().trim();
s=str.substring(0,1);
System.out.println("Enter the new character");
String r=scan.nextLine().trim();
r=str.substring(0,1);
str=str.replace(s, r);
}
else if(str1.equalsIgnoreCase("replace single"))
{
System.out.println("Enter the character to replace");
String s=scan.nextLine().trim();
s=str.substring(0,1);
System.out.println("Enter the new character");
String r=scan.nextLine().trim();
r=str.substring(0,1);
System.out.print("Which "+ s+ " do you want to replace?");
int index=scan.nextInt();
for (int i =0; i<str.length();i++){
if(str.substring(i,i+1).equalsIgnoreCase(s))
index--;
if(index==0)
str=str.substring(0,i)+r+str.substring(i+1,str.length());
}
}
else if(str1.equalsIgnoreCase("remove"))
{
System.out.println("Enter the character to remove");
String s=scan.nextLine().trim();
s=str.substring(0,1);
str.replace(s,"");
}
else if(str.equalsIgnoreCase("quit"))
System.exit(0);
else
System.out.println("Please enter a valid command");
System.out.println(str);
}
}
}
答案 0 :(得分:3)
当然,当您执行println(str)
并且永远不会更改str
的值时,它会打印输入。
示例:在"print reverse"
的情况下,您在名为reverse
的变量中构建一个新的反向字符串,但您不会对其执行任何操作。也许str = reverse
就是你想要的。
答案 1 :(得分:0)
首先,您要求操作字符串并将其存储在str
中,但在相反的任务中,您需要一个新字符串并将其存储在s
中。
然后你在变量reverse
中构建了一个反向字符串,但你没有把它保留在任何地方 - 它超出了范围。
在删除任务中,您不存储replace
方法的结果。此方法不会更改str
,它会返回包含更改的新字符串。
然后检查str
是否要退出命令,但是您应该检查str1
。
<强>提示强>
选择好的变量名称。输入它们所花费的额外时间远远少于保存时间,因为很容易看出它们的用途。
缩进你的代码 - 我已经编辑了你的问题。看看阅读有多容易?
始终对if,for,while,do等使用{和}。当添加了应该在代码块中的另一行代码时,它可以很容易理解并减少潜在的错误。
答案 2 :(得分:0)
嗯,如果你看起来很好,你会注意到奇怪的东西:
1.当你反转一个字符串时,你将反转的字符串保存在一个局部变量上并且没有对它做任何事情(字符串反向)
2.在替换单个时,您扫描了一个char(实际上是一个字符串),但很快就用str的第一个字符覆盖了该值。
你对String r做了同样的事情(copy&amp; paste ?;))。
比你替换了一个char wiyh相同的char =&gt;我们留在原来的String,str。
这是替换单个和替换所有。
3.与删除中的(2)相同。
我建议将其分为功能,一个替换单个,一个替换所有,一个删除和一个反转。
此外,当cipy和粘贴相同的代码时会产生相同的错误/意外输出。这样做时要小心!