Java 如何确定两个不同的单词是否有相同的字母?

Java 如何确定两个不同的单词是否有相同的字母?,java,arrays,string,sorting,arraylist,Java,Arrays,String,Sorting,Arraylist,我有一个单词列表,其中包含字典中的所有单词,我应该使用该列表查找输入的单词是否与其他单词具有相同的字符 我尝试使用Arrays.sort()方法对每个单词和输入单词按字母顺序排列,然后使用.equals()方法比较这两个字符串。然后打印.equals()为true的实例 然而,当我这样做时,输出只是打印列表中的每个单词,我不知道为什么 为清晰起见进行编辑:目的是确定列表中与输入匹配的单词。 例如:如果我输入act,所有带有字母a、c和t的单词都将作为输出。在这种情况下,唯一的输出将是cat。简单

我有一个单词列表,其中包含字典中的所有单词,我应该使用该列表查找输入的单词是否与其他单词具有相同的字符

我尝试使用Arrays.sort()方法对每个单词和输入单词按字母顺序排列,然后使用.equals()方法比较这两个字符串。然后打印.equals()为true的实例

然而,当我这样做时,输出只是打印列表中的每个单词,我不知道为什么

为清晰起见进行编辑:目的是确定列表中与输入匹配的单词。
例如:如果我输入act,所有带有字母a、c和t的单词都将作为输出。在这种情况下,唯一的输出将是cat。

简单算法,以确定两个单词是否共享相同的字母:

  • 对每个单词中的字母进行排序
  • 按字母顺序排列结果
  • 寻找重复的
  • 当然,这只表明了字谜的存在。返回一个字谜列表需要做更多的工作。 一种方法是制作一个地图,其中键是已排序的单词(即每个单词中的字符已排序),值是包含这些字母的单词列表

    示例(未测试代码,仅用于说明):

    Map anagrams=newhashmap();
    for(字符串s:inputList)
    {
    key=sort(s);//以字符串形式返回s,按字符排序,不重要
    if(anagrams.get(key)==null)
    { 
    put(key,newlinkedlist());
    }
    字谜。获取(键)。添加(s);
    }
    

    这个问题并不十分清楚,但我将提供一个与我见过的其他问题不同的解决方案:

    您还可以使用list
    removeAll
    比较两个列表之间的常用字母

    listA.removeAll(listB); //listA will contain any letters not common to listB
    if (listA.size() == 0) {
        return true; 
    }
    
    测试输出:

    apppppppleeeeeeee <-- Input
    [a, p, p, p, p, p, p, p, l, e, e, e, e, e, e, e, e] //String split 1
    [a, p, p, l, e] //String split 2
    letters are the same
    
    appleeeeeef <-- Input
    [a, p, p, l, e, e, e, e, e, e, f]
    [a, p, p, l, e]
    contains different letters
    

    apppppleeeeee向我们展示代码。就像一个乱七八糟的单词?那么
    也会搭配
    ?这个问题不是特别清楚。我不知道为什么对我的答案投反对票,但如果这不符合你的要求,请编辑你的问题,让我们知道你在问什么。
    listA.removeAll(listB); //listA will contain any letters not common to listB
    if (listA.size() == 0) {
        return true; 
    }
    
    apppppppleeeeeeee <-- Input
    [a, p, p, p, p, p, p, p, l, e, e, e, e, e, e, e, e] //String split 1
    [a, p, p, l, e] //String split 2
    letters are the same
    
    appleeeeeef <-- Input
    [a, p, p, l, e, e, e, e, e, e, f]
    [a, p, p, l, e]
    contains different letters
    
    public class Main {
    
        public Main () {
            Scanner scan;
            scan = new Scanner(System.in);
            String input = scan.nextLine(); 
            if(check(split(input), split("apple"))) {
                System.out.println("letters are the same");
            }
            else {
                System.out.println("contains different letters");
            }
        }
    
        public boolean check(ArrayList<String> listA, ArrayList<String> listB) {
            listA.removeAll(listB); //listA will contain any letters not common to listB
            if (listA.size() == 0) 
                return true;
            return false;
        }
    
        public ArrayList<String> split(String word) {
            String[] splitMe = word.split("(?!^)");
            ArrayList<String> splitList = new ArrayList<String>();
            for (int i = 0; i < splitMe.length; i++) {
                splitList.add(splitMe[i]);  
            }
            System.out.println(splitList);
            return splitList;
        }
    
        public static void main(String[] args) {
            Main main = new Main();
        }
    }