返回字符串结果不正确

时间:2016-03-07 21:12:14

标签: java string replace reverse

这是我的代码,我希望用户输入单词或短语,然后用户可以删除所有字符,删除单个字符,用另一个字符替换字符并反转字符。

每个单独的功能都可以自己工作,但是当我把它放在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);

        }
    }
}

3 个答案:

答案 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和粘贴相同的代码时会产生相同的错误/意外输出。这样做时要小心!