Сравните первые 3 символа строки со списком строк каждой строки Первые 3 символа

Образец кода, которому нужно решение?

public class TestJJava {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String abc = "123XXXXX0";

        ArrayList<String> lstValues = new ArrayList<String>();
        lstValues.add("111XXXX1");
        lstValues.add("122XXX1");
        lstValues.add("123XXXX1");
        if (lstValues.subList(0, 3).contains(abc.substring(0, 3))){
            System.out.println("**** Match Found ***");
        }else{
            System.out.println("**** No Match Found ****");
        }

    }

}

Что должно возвращать совпадение, но его возвращение не найдено.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 403
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

В настоящее время вы не сравниваете первые три символа, потому что subList фактически не применяет функцию подстроки (здесь он копирует список как есть). Вы также можете инициализировать ваш List более эффективно (и вам следует программировать на интерфейс List). Я бы использовал stream() и каждый элемент map, используя String.substring и anyMatch. Нравится,

String abc = "123XXXXX0";
List<String> lstValues = new ArrayList<>(List.of("111XXXX1", "122XXX1", "123XXXX1"));
if (lstValues.stream().map(x -> x.substring(0, 3)).anyMatch(abc.substring(0, 3)::equals)) {
    System.out.println("**** Match Found ***");
} else {
    System.out.println("**** No Match Found ****");
}

Какие выходы

**** Match Found ***

Спасибо за ответ, в моем проекте мы используем версию 1.7.

user1669692 05.01.2019 07:12

Вы сравниваете не полный String в списке, а скорее подстроку одной из строк в списке.

Вам нужно будет просмотреть список и проверить каждый String индивидуально.

String temp = abc.substring(0,3);
boolean flag = true;
for(String value: lstValues.subList(0, 3))
 if (value.contains(temp)) // or if (value.indexOf(temp) != -1)
  {
    System.out.println("**** Match Found ****");
    flag = false;
    break;
  }
if (flag)
  System.out.println("**** No Match Found ****");

Это то, что вы должны делать.

String first3 = abc.substring(0,3);
boolean found = false;
for (String s : lstValues) {
    if (s.startsWith(first3)) {
        found = true;
        break;
    }
}

if (found) {
    System.out.println("**** Match Found ***");
} else {
    System.out.println("**** No Match Found ****");
}

Просмотрите список, проверяя каждую запись, пока не найдете совпадение.

List.contain (Object o) проверяет, находится ли «объект» в списке или нет. В вашем случае объекты, которые находятся в списке, - это String, и это «111XXXX1», «122XXX1» и «122XXX1». Итак, если следующее вернет только истину

lstValues.contain("111XXXX1") -> правда lstValues.contain("122XXX1") -> правда lstValues.contain("122XXX1") -> правда

Но если вы сделаете следующее, он вернет false:

lstValues.contain ("123") -> ложь.

Вот что javadoc говорит для List.contains (Object o)

Возвращает истину, если этот список содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e такой, что (o == null? E == null: o.equals (e)).

Таким образом, вы можете видеть, что он определяет, равен объект или нет. Таким образом, ни один из элементов в ArrayList не соответствует «123». Поэтому вы получите сообщение «Совпадений не найдено».

Java 1.7

попробуй это ..

`public static void main(String[] args) {

    String abc = "123XXXXX0";

    ArrayList<String> lstValues = new ArrayList<String>();
    lstValues.add("111XXXX1");
    lstValues.add("122XXX1");
    lstValues.add("123XXXX1");

    boolean found = false;

    for (String temp : lstValues.subList(0, 3)) {
        if (temp.contains(abc.substring(0, 3))) {
            found = true;
            break;
        }
    }

    if (found) {
        System.out.println("**** Match Found ***");
    } else {
        System.out.println("**** No Match Found ****");
    }
}`

Спасибо ! Мне также нужно проверить обратное условие. Предположим, что список содержит 123, он не должен устанавливать значение для найденного как истинного.

user1669692 05.01.2019 07:39

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

KMD 05.01.2019 07:45

Строка abc = "123XXXXX0", значение 123, если оно присутствует в ArrayList <"123", "111", "122">, и если я добавлю! Temp.contains (abc.substring (0, 3)), оно не должно вводиться, если блок , но повторяется по крайней мере один раз.

user1669692 05.01.2019 07:54

Другие вопросы по теме