字符串包含与列表包含

wecizke3  于 2021-07-12  发布在  Java
关注(0)|答案(5)|浏览(310)

我正在写一个处理名字的应用程序。我想实现的是,如果列表中的项包含“完全”相同的字符,那么应该返回true。此外,如果输入包含“精确”名称,然后在名称后面或前面加上字符,则返回true。例如,对于输入“sid”返回true,对于输入“iisede”返回true,但是“id”返回false。
我更希望使用列表实现,但这并没有达到我的要求。但是,如果我选择string.contains(…),这将非常有效。如有任何建议,将不胜感激。

public static boolean list(String input) {
    List<String> list = new ArrayList<>();
    list.add("Sid");
    list.add("Siddu");
    list.add("Kapil");

**EDIT:**

String[] inputs = input.split(" ");
// for every input item check in list

for(int = 0; i < inputs.length; i++) {
   if(inputs[i].contains(list) {
       return true;
   }
   else {
      return false;
  }
}

**ORIGINAL:**

    if(list.contains(input)) {
        return true;
    }
    return false;
}
8oomwypt

8oomwypt1#

如果输入是空格分隔的单词,请使用嵌套for循环检查列表中的任何元素是否包含在任何单词中。

for (String x : list) {
    for (String y : input.split(" ")) {
        if (x.contains(y)) return true;
    }
}
return false;
2lpgd968

2lpgd9682#

按以下步骤操作:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Tests
        System.out.println(list("Sid"));
        System.out.println(list("Siddu"));
        System.out.println(list("iiSidee"));
        System.out.println(list("id"));
        System.out.println(list("aaaKapil"));
        System.out.println(list("Kapil"));
        System.out.println(list("ii"));
    }

    public static boolean list(String input) {
        List<String> list = new ArrayList<String>();
        list.add("Sid");
        list.add("Siddu");
        list.add("Kapil");
        for (String s : list) {
            if (s != null && input != null) {
                if (input.equals(s) || input.contains(s)) {
                    return true;
                }
            }
        }
        return false;
    }
}

输出:

true
true
true
false
true
true
false

[更新]添加此更新以澄清@lainatnavi的疑问

public class Main {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        for (long i = 0; i < Integer.MAX_VALUE; i++)
            "hello".equals("hello");
        System.out.println("Time taken: " + (System.currentTimeMillis() - startTime) + " ms");

        startTime = System.currentTimeMillis();
        for (long i = 0; i < Integer.MAX_VALUE; i++)
            "hello".contains("hello");
        System.out.println("Time taken: " + (System.currentTimeMillis() - startTime) + " ms");
    }
}

输出:

Time taken: 498 ms
Time taken: 6405 ms

我这么做的原因 if (input.equals(s) || input.contains(s)) 我的回答是如果 input.equals(s) 退货 true ,控件将不进行检查 input.contains(s) 这将是一个性能优势。

ibps3vxo

ibps3vxo3#

您可以很容易地用流(Java8)来实现这一点。另外,如果你有大数据,你可以在它的帮助下提高性能。

public static boolean list(String input) {
    List<String> list = new ArrayList<>();
    list.add("Sid");
    list.add("Siddu");
    list.add("Kapil");
    return list.stream().anyMatch(item -> item.equals(input) || input.contains(item));
}
i2byvkas

i2byvkas4#

您可以将这个正则表达式[s][i][d]与这个代码boolean b3=pattern.matches(“[s][i][d]”)一起使用;

9avjhtql

9avjhtql5#

这可能是问题所在,您没有比较列表中的每一项,您应该执行以下操作:

public static boolean list(String input) {
List<String> list = new ArrayList<>();
list.add("Sid");
list.add("Siddu");
list.add("Kapil");

for (int i = 0; i < list.length; i++) {
    if(list.get(i).contains(input)) {
        return true;
    }
    return false;
}

}

相关问题