从字符串中删除重复字符

时间:2015-08-13 13:58:01

标签: java duplicates

我试图从字符串中删除重复的字符。例如,如果我输入字符串abaqueru,则应该为bqer提供重复的字符au。但是,结果是不必要的循环。这是代码:

public class question {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
   String s = "abaqueru";

   calculate(s);
    // TODO code application logic here
}

public static void calculate(String s){
     String result;

        for(int i = 0; i < s.length(); i++)
        {
           char c = s.charAt(i);
           char temp;
           temp=c;
           for(int j = 1; j < s.length(); j++)
                {

                   char x = s.charAt(j);
                   if(temp==x){
                       s=s.replaceAll(""+temp,"");
                       calculate(s);
                   }



                }

            System.out.println(s);
        }

}

3 个答案:

答案 0 :(得分:7)

String在java中是不可变的。在replaceall之后,您需要将其分配回来

s=s.replaceAll(""+temp,"");

如果您没有将其分配回去,那么循环将永远继续。

解决了stackoverflow错误,我没有专注于你的实际逻辑:)

答案 1 :(得分:2)

我将使用Suresh Atta的答案导致堆栈溢出错误。 我也检查了你的逻辑。做了一些必要的改变

public class Question {




    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       String s = "abaqueru";

       calculate(s);
        // TODO code application logic here
    }

    public static void calculate(String s){
         String result;

            for(int i = 0; i < s.length(); i++)
            {
               char c = s.charAt(i);

               char temp;
               temp=c;
               for(int j = i+1; j < s.length(); j++)
                    {

                       char x = s.charAt(j);
                       if(temp==x){

                          s=s.replaceAll(""+temp, "");

                           break;
                         //  calculate(s);
                       }



                    }


            }

            System.out.println(s);

    }

}

然而,这可以进一步定制,以在空间和时间方面实现性能。事实上,可以使用更简单的逻辑:)

答案 2 :(得分:1)

绝对适合Suresh Atta的回答!但是,我想我会帮助您浏览一下代码,以帮助您找到一些错误。

我只是浏览了代码中的逻辑,但肯定有一些值得一看的东西。最值得注意的是,j从未在内循环中使用。实际上,如果您使用的是IDE,则应警告您j从未使用过。

更新:另外,请考虑使用String.valueOf(char c)代替s=s.replaceAll(""+temp,""); 打电话给你if(temp==x)条件。也就是说,我认为你可以将角色转换为String?然后你可以使用String.append(),你可以在我发给你的链接上阅读它!