字符串包含与列表包含

时间:2020-02-13 20:20:48

标签: java string list

我正在编写一个处理名称的应用程序。我想要实现的是,如果列表中的项目包含“完全”相同的字符,则应返回true。此外,如果输入包含“精确”名称,然后在名称之后或之前包含字符,则返回true。例如,对于输入“ Sid”返回true,对于输入“ iiSidee”返回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;
}

5 个答案:

答案 0 :(得分:2)

执行以下操作:

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)这将是一个性能效益。

答案 1 :(得分:0)

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

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;
}

}

答案 2 :(得分:0)

您可以使用流(Java 8)轻松地完成此操作。另外,如果您将拥有大数据,则可以借助它来提高性能。

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));
}

答案 3 :(得分:0)

您可以使用此正则表达式[S] [I] [D],此代码为boolean b3 = Pattern.matches(“ [S] [I] [D]”);

答案 4 :(得分:0)

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

for (String x : list) {
    for (String y : input.split(" ")) {
        if (x.contains(y)) return true;
    }
}
return false;
相关问题