Образец кода, которому нужно решение?
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 ****");
}
}
}
Что должно возвращать совпадение, но его возвращение не найдено.




В настоящее время вы не сравниваете первые три символа, потому что 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 ***
Вы сравниваете не полный 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, он не должен устанавливать значение для найденного как истинного.
Чего именно вы хотите достичь, не могли бы вы уточнить или написать ожидаемый результат?
Строка abc = "123XXXXX0", значение 123, если оно присутствует в ArrayList <"123", "111", "122">, и если я добавлю! Temp.contains (abc.substring (0, 3)), оно не должно вводиться, если блок , но повторяется по крайней мере один раз.
Спасибо за ответ, в моем проекте мы используем версию 1.7.