我正在编写一个处理名称的应用程序。我想要实现的是,如果列表中的项目包含“完全”相同的字符,则应返回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;
}
答案 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;