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
答案 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}