如何删除字符串中的重复单词而不使用数组?

时间:2017-02-19 07:20:11

标签: java string

有没有什么办法可以在不使用数组的情况下从字符串中删除重复的单词?

例如,我有这句话" 这个 java编程程序 ", 输出必须是" 这个java编程"。

我看到类似的删除重复问题,但所有问题都在使用数组。

4 个答案:

答案 0 :(得分:2)

好吧,在Java中,字符串实际上是字符数组的对象包装器,它主要增加了不变性。

所以,没有实际的方法可以不为您的任务使用数组。 即使你围绕一个在代码实现中没有使用任何直接数组创建的解决方案,你仍然会在幕后使用数组(如果你希望你的解决方案是最优的)。

答案 1 :(得分:1)

使用简单的方法从给定字符串中删除重复的单词

{{1}}

答案 2 :(得分:0)

以下代码可以帮助您:)

public class RemDup
{
    public static void main ( String[] args )
    {
        String sentence = "this is java programming program";
        int max_word_length = sentence.length()/2;
        int min_word_length = 2;
        while(max_word_length>=min_word_length)
        {
        int si = 0;
        int ei = max_word_length;
        while ( ei<sentence.length() )
        {
            int e=ei;
            while ( e<sentence.length() )
            {
                int ind = sentence.indexOf ( sentence.substring ( si, ei ),e );
                if ( ind!=-1 )
                {
                    sentence = sentence.substring ( 0,ind ) +sentence.substring ( ind+max_word_length,sentence.length() );
                    e=ind+max_word_length;
                }
                else break;
            }


            si+=1;
            ei+=1;

        }
        max_word_length--;
        }
        System.out.println(sentence);
    }

}

答案 3 :(得分:0)

以下是更新后的代码@Han

public class RemDup
{
        public static void main ( String[] args )
        {
            String sentence = "this is java programming program progress";
            int max_word_length = sentence.length()/2;
            int min_word_length = 2;
            while(max_word_length>=min_word_length)
            {
            int si = 0;
            int ei = max_word_length;
            while ( ei<sentence.length() )
            {
                int e=ei;
                while ( e<sentence.length() )
                {
                    int ind = sentence.indexOf ( sentence.substring ( si, ei ),e );
                    if ( ind!=-1 )
                    {
                        if(
                         sentence.substring(ind-1,ind).equals(" ")
                        &((ind+max_word_length)>=sentence.length()||
                        sentence.substring(ind+max_word_length,ind+max_word_length+1).equals(" "))
                        )
                        {
                        sentence = sentence.substring ( 0,ind ) +sentence.substring ( ind+max_word_length,sentence.length() );
                        }
                        e=ind+max_word_length;

                    }
                    else break;
                }


                si+=1;
                ei+=1;

            }
            max_word_length--;
            }
            System.out.println(sentence);
        }

}