程序从字符串中获取唯一的单词?为什么这个印刷所有的话

时间:2017-03-14 18:31:46

标签: java string

import java.util.ArrayList;
import java.util.Arrays;

public class Test20{

  public static void main(String args[]){
    String str="Hello java Hello python Hello testing Hello java";
    ArrayList<String> list=new ArrayList<String>();
    String s[]=str.split(" ");

    String p=s[0];
    list.add(p);

    for(int i=1;i<s.length;i++){

      if(!(p==s[i])){
        list.add(s[i]);
      }
      p=s[i];
    }//i

    for(int i=0;i<list.size();i++){
      System.out.println(list.get(i));
    }
  }
}

我想得到这个结果:

Hello 
java
python
testing

7 个答案:

答案 0 :(得分:1)

您可以使用contains的{​​{1}}方法。

ArrayList

编辑:并且无需对第一个字进行特殊处理。您可以在索引for (int i = 1; i < s.length; i++) { if (!(list.contains(s[i]))) { list.add(s[i]); } } 处启动for循环,并省略循环上方的两行。

答案 1 :(得分:1)

List s(包括ArrayList)允许重复。

要避免它们,您可以在添加...之前使用contains方法进行检查。

if (!list.contains(s[i])) {
  list.add(s[i]);
}

...或者使用Set(例如HashSet),它会隐式丢弃重复的条目。

答案 2 :(得分:1)

这是我的解决方案。使用Set,让Java为您完成所有工作。

public static void main(String args[]){

    String str="Hello java Hello python Hello testing Hello java";
    Set<String> myset=new HashSet<>();
    String s[]=str.split(" ");

    for(int i=1;i<s.length;i++){

            myset.add(s[i]);

     }

     for (String sss: myset){

        System.out.println(sss);

    }
}

}

答案 3 :(得分:0)

逻辑在解决方案中是错误的。你只是比较彼此相邻的单词。相反,您需要检查它是否存在于列表中,或者您可以使用HashSet来获得唯一。

String s[] = str.split(" "); java.util.Set result = new java.util.HashSet(java.util.Arrays.asList(s)); System.out.println(result);

答案 4 :(得分:0)

如果你想使用自己的实现(提供的实现更清晰),并打印单独的单词。

你只需要删除这一行:

for(int i=1;i<s.length;i++){

      if(!(p==s[i])){
        list.add(s[i]);
      }
      p=s[i]; // REMOVE 
    }//i

如果你不断更改p,代码中的Hello是总是重复的单词,那么检查将永远不会有效。这不会在所有字符串中找到重复项,只是您的示例字符串。

答案 5 :(得分:0)

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringWordUnique {

  static void uniqueWord(String str) {

        Pattern p=Pattern.compile("[a-zA-Z]+");
        Matcher m=p.matcher(str);
        HashMap<String,Integer> hm=new HashMap<String, Integer>();

        while(m.find()) {
            String word=m.group();

            if(!hm.containsKey(word))
                hm.put(word, 1);
            else
                hm.put(word, hm.get(word)+1);

        }

        Set<String> s=hm.keySet();
        Iterator<String> itr=s.iterator();

        while(itr.hasNext()) {

            String w=itr.next();

            if(hm.get(w)==1)
                System.out.println(w);
        }
    }

   public static void main(String[] args) {
        String sts="Java is great. String is also great. Boot also great";
        uniqueWord(sts);
   }

}

答案 6 :(得分:0)

您也可以使用LinkedHashMap做到这一点。最后,它会为您提供每个唯一的单词以及出现的单词。
公共静态void main(String [] args){

    String[] str = { "acorns", "apple", "banana", "acorns", "people", "acorns" };

或将字符串转换为字符串数组

    Map<String,Integer> map = new LinkedHashMap<String,Integer>();

    for(String a: str)
    {
        if(!map.containsKey(a))
        {
            map.put(a,1);
        }
        else
        {
            map.put(a,map.get(a)+1);
        }
    }

    System.out.println(map);

}

控制台结果:{acorns = 3,apple = 1,banana = 1,people = 1}