Строка содержит против Список содержит - PullRequest
0 голосов
/ 13 февраля 2020

Я пишу приложение, которое обрабатывает имена. Я хочу добиться этого, если элементы в списке содержат «точно» одинаковые символы, а затем должны возвращать 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 ]

2 голосов
/ 13 февраля 2020

Сделайте это следующим образом:

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, элемент управления не будет go проверять input.contains(s), что приведет к повышению производительности.

0 голосов
/ 14 февраля 2020

Если входные данные являются разделенными пробелами словами, используйте вложенные циклы for, чтобы проверить, содержится ли какой-либо из элементов списка в каком-либо из слов.

for (String x : list) {
    for (String y : input.split(" ")) {
        if (x.contains(y)) return true;
    }
}
return false;
0 голосов
/ 13 февраля 2020

Вы можете использовать это регулярное выражение [S] [I] [D], с этим кодом boolean b3 = Pattern.matches ("[S] [I] [D]");

0 голосов
/ 13 февраля 2020

Вы можете легко сделать это с помощью потока (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));
}
0 голосов
/ 13 февраля 2020

это может быть проблемой, вы не сравниваете каждый элемент в списке, вы должны сделать что-то вроде этого:

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...