Java 在数组中搜索包含所有字符(按任意顺序)的值和返回值

Java 在数组中搜索包含所有字符(按任意顺序)的值和返回值,java,arrays,contains,Java,Arrays,Contains,我到处找,最后不得不问 例如,我有一个数组,其中包含[“123456”、“132457”、“468591”、…] 我有一个值为“46891”的字符串 如何在数组中搜索并找到包含字符串值中所有字符的对象?例如,带有“468591”的对象包含我的字符串值中的所有数字,尽管它不完全匹配,因为在“8”和“9”之间添加了“5” 我最初的想法是将字符串拆分为它自己的数字数组(即[4]、[6]、[8]、[9]、[1]),然后在数组中搜索包含该数字的对象,从中创建一个新数组,并不断缩小它,直到只剩下一个。您可以

我到处找,最后不得不问

例如,我有一个数组,其中包含[“123456”、“132457”、“468591”、…]

我有一个值为“46891”的字符串

如何在数组中搜索并找到包含字符串值中所有字符的对象?例如,带有“468591”的对象包含我的字符串值中的所有数字,尽管它不完全匹配,因为在“8”和“9”之间添加了“5”

我最初的想法是将字符串拆分为它自己的数字数组(即[4]、[6]、[8]、[9]、[1]),然后在数组中搜索包含该数字的对象,从中创建一个新数组,并不断缩小它,直到只剩下一个。

您可以使用
string#chartAt()
在嵌套for循环中,将字符串与数组的每个元素进行比较

此方法将帮助您检查两个字符串中是否包含一个字符。

您可以在嵌套for循环中使用
String#chartAt()
将字符串与数组的每个元素进行比较


此方法将帮助您检查两个字符串中是否都包含一个字符。

这比straigt forward解决方案更复杂。
这些都是更好的算法,但这里有一个易于实现和理解的算法

解决方法:

  • 检查给定字符串中的每个字符,并检查 给阿雷
  • 收集所选字符串中每个字符串的列表 包含给定字符的数组
  • 检查是否没有其他要检查的字符。
    如果有,在收集的列表(结果列表)上再次执行测试。
    否则,返回所有可能的匹配项

  • 这比straigt forward解决方案更棘手。
    这些都是更好的算法,但这里有一个易于实现和理解的算法

    解决方法:

  • 检查给定字符串中的每个字符,并检查 给阿雷
  • 收集所选字符串中每个字符串的列表 包含给定字符的数组
  • 检查是否没有其他要检查的字符。
    如果有,在收集的列表(结果列表)上再次执行测试。
    否则,返回所有可能的匹配项

  • 因为这可能是一个学习任务,我将给你一个想法,而不是一个实现

    首先定义一个包含两个字符串的函数,如果第一个字符串包含第二个字符串的所有字符,则返回
    true
    ,否则返回
    false
    。应该是这样的:

    boolean containsAllCharsInAnyOrder(String str, String chars) {
        ...
    }
    
    在函数内部设置一个循环,从
    chars
    字符串中逐个拾取字符
    ch
    ,然后使用
    str.indexOf(ch)
    查看字符串中是否存在该字符。如果指数为非负,则继续;否则,返回false

    如果循环结束而不返回,则您知道
    chars
    中的所有字符都存在于
    src
    中,因此您可以返回
    true


    使用此函数,在主函数中设置另一个循环来遍历数组的元素,然后依次调用每个元素的
    containsAllCharsInAnyOrder

    因为这可能是一个学习任务,所以我将给您一个想法,而不是一个实现

    首先定义一个包含两个字符串的函数,如果第一个字符串包含第二个字符串的所有字符,则返回
    true
    ,否则返回
    false
    。应该是这样的:

    boolean containsAllCharsInAnyOrder(String str, String chars) {
        ...
    }
    
    在函数内部设置一个循环,从
    chars
    字符串中逐个拾取字符
    ch
    ,然后使用
    str.indexOf(ch)
    查看字符串中是否存在该字符。如果指数为非负,则继续;否则,返回false

    如果循环结束而不返回,则您知道
    chars
    中的所有字符都存在于
    src
    中,因此您可以返回
    true


    有了这个函数,在主函数中设置另一个循环来遍历数组的元素,然后依次对每个元素调用
    containsAllCharsInAnyOrder

    我想您可以使用集合来实现这一点

    List<String> result = new ArrayList<>();
    Set<String> chars = new HashSet<>(Arrays.asList(str.split(""));
    for(String string : stringList) {
        Set<String> stringListChars = new HashSet<>(Arrays.asList(string.split(""));
    
        if(chars.containsAll(stringListChars)) {
           result.add(string);
        }
    }
    

    我想你可以用电视机

    List<String> result = new ArrayList<>();
    Set<String> chars = new HashSet<>(Arrays.asList(str.split(""));
    for(String string : stringList) {
        Set<String> stringListChars = new HashSet<>(Arrays.asList(string.split(""));
    
        if(chars.containsAll(stringListChars)) {
           result.add(string);
        }
    }
    

    您最初的想法是一个好的开始,所以您可以做的不是创建一个数组,而是创建一个集合,然后使用方法创建所有可能的子集,只过滤那些具有“46891”的子集。长度mebers,将每个集合转换为
    字符串
    并在原始数组中查看这些字符串:)

    您最初的想法是一个好的开始,因此,您可以做的不是创建一个数组,而是创建一个集合,然后使用方法创建所有可能的子集,只过滤那些具有“46891”的子集。长度mebers,将每个集合转换为
    字符串
    ,并在原始数组中查找这些字符串:)

    您可以使用ArrayList containsAll方法以及asList执行此操作:

    ArrayList<Character> lookingForChars = new ArrayList<Character>(Arrays.asList(lookingForString.toCharArray()));
    
    for (String toSearchString : array) {
    
        ArrayList<Character> toSearchChars = new ArrayList<Character>(Arrays.asList(toSearchString.toCharArray));
        if (toSearchChars.containsAll(lookingForChars)) {
            System.out.println("Match Found!");
        }
    }
    
    ArrayList lookingForChars=新的ArrayList(Arrays.asList(lookingForString.tocharray());
    for(字符串到搜索字符串:数组){
    ArrayList toSearchChars=新的ArrayList(Arrays.asList(toSearchString.toCharArray));
    如果(搜索字符包含所有(查找字符)){
    System.out.println(“找到匹配项!”);
    }
    }
    
    您可以使用ArrayList containsAll方法以及asList来实现这一点:

    ArrayList<Character> lookingForChars = new ArrayList<Character>(Arrays.asList(lookingForString.toCharArray()));
    
    for (String toSearchString : array) {
    
        ArrayList<Character> toSearchChars = new ArrayList<Character>(Arrays.asList(toSearchString.toCharArray));
        if (toSearchChars.containsAll(lookingForChars)) {
            System.out.println("Match Found!");
        }
    }
    
    ArrayList lookingForChars=新的ArrayList(Arrays.asList(lookingForString.tocharray());
    for(字符串到搜索字符串:数组){
    ArrayList toSearchChars=新的ArrayList(Arrays.asList(toSearchString.toCharArray));
    如果(搜索字符包含所有(查找字符)){
    System.out.println(“找到匹配项!”);
    }
    }
    
    试试这个

    public static void main(String args[]) {
        String[] array = {"123456", "132457", "468591"};
        String search = "46891";
        for (String element : array) {
            boolean isPresent = true;
            for (int index = 0; index < search.length(); index++) {
                if(element.indexOf(search.charAt(index)) == -1){
                    isPresent = false;
                    break;
                }
            }
    
            if(isPresent)
                System.out.println("Element "+ element + " Contains Serach String");
            else
                System.out.println("Element "+ element + " Does not Contains Serach String");
        }
    }
    
    publicstaticvoidmain(字符串参数[]){
    字符串[]数组={“123456”、“132457”、“468591”};
    字符串搜索=“46891”;
    for(字符串元素:数组){
    布尔值isPresent=true;
    对于(int index=0;index