Java 从字符串中获取唯一单词的程序?为什么要打印所有的文字
您可以只使用ArrayList的contains方法 编辑:并且没有必要对第一个单词进行特殊处理。您只需在索引0处启动for循环,并省略循环上方的两行。包括ArrayList的列表允许重复 为了避免它们,您可以在添加之前使用contains方法进行检查Java 从字符串中获取唯一单词的程序?为什么要打印所有的文字,java,string,Java,String,您可以只使用ArrayList的contains方法 编辑:并且没有必要对第一个单词进行特殊处理。您只需在索引0处启动for循环,并省略循环上方的两行。包括ArrayList的列表允许重复 为了避免它们,您可以在添加之前使用contains方法进行检查 for (int i = 1; i < s.length; i++) { if (!(list.contains(s[i]))) { list.add(s[i]); } } …或者改用HashSet之类的集
for (int i = 1; i < s.length; i++) {
if (!(list.contains(s[i]))) {
list.add(s[i]);
}
}
…或者改用HashSet之类的集合,它隐式地丢弃重复的条目。解决方案中的逻辑是错误的。你只是在比较旁边的单词。相反,您需要检查它是否出现在列表中,或者您可以使用HashSet来获得唯一性 字符串s[]=str.split; java.util.Set result=new java.util.HashSetjava.util.Arrays.asLists;
系统输出打印结果 这是我的解决方案。使用集合,让Java为您完成所有工作
if (!list.contains(s[i])) {
list.add(s[i]);
}
如果您想使用自己的实现,那么提供的实现会更简洁一些,并且对于您的示例来说,可以打印唯一的单词 您只需删除此行:
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);
}
}
}
如果您不断更改p,代码中的p是Hello,即总是重复的单词,那么检查将永远不会起作用。这不适用于在所有字符串中查找重复项,只适用于示例字符串。您也可以使用LinkedHashMap进行此操作。最后,它会给你每一个独特的单词以及单词的出现。
for(int i=1;i<s.length;i++){
if(!(p==s[i])){
list.add(s[i]);
}
p=s[i]; // REMOVE
}//i
公共静态无效字符串[]args{
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);
}
}
或将字符串转换为字符串数组
String[] str = { "acorns", "apple", "banana", "acorns", "people", "acorns" };
控制台结果:{acorns=3,apple=1,banana=1,people=1}请记住,在Java中不能使用==来比较字符串。必须使用.equals。这并不重要,只是需要阅读:为什么不实现一个Set接口?消除重复项几乎是免费的。虽然这段代码可能回答了这个问题,但提供了关于为什么和/或如何使用这段代码的附加上下文我们的问题是如何提高其长期价值。
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);
}
}
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);
}