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