Как НЕ найти что-то в JAVA?

#java #arrays #string #find

#java #массивы #строка #Найти

Вопрос:

РЕДАКТИРОВАТЬ: хорошо, извините за не очень понятный вопрос. Давайте попробуем другой способ: у нас есть список имен: Питер, Джон, Адам

Мы ищем строковое имя; Если ArrayList содержит строку, мы хотим записать строку. Если ArrayList не содержит строку, мы хотим добавить строку в ArrayList .

Если я ищу «Адам», то эта программа не работает, потому что сначала она находит имя «Питер», затем «Джон» и только после этого находит «Адам». Итак, в первые 2 раза он думает, что «Адама» нет в списке, и действует так.

 String findName;
for (i = 0; i < arrayList.size(); i  ) {
  if (arrayList.get(i).getValue().contains(findName)) {
    System.out.println(findName);
    break;
  }
  else 
   arrayList.add(findString);
 }
  

Оригинальный вопрос :

У меня есть строка и массив (ArrayList). Я должен что-то сделать, если строка находится в массиве, и что-то еще, если ее нет в массиве. Как мне это сделать? Я не могу сделать это так :

 String myString;
for (i = 0; i < arrayList.size(); i  ) {
  if (arrayList.get(i).getValue().equals(myString)) {
    DO SOMETHING;
    break;
  }
  else
   DO SOMETHING ELSE;
 }
  

потому что он найдет строку только один раз, а все остальные разы он будет действовать, как arraylist не содержит строку.

Итак, я делаю это так :

 String findString = "0";
String myString;
for (i = 0; i < arrayList.size(); i  ) {
  if (arrayList.get(i).getValue().equals(myString)) {
    DO SOMETHING;
    findString = "2";  //when I find the String, I change this
    break;
  }
  if findString == "0";  //if I have not found the String, this happens
   DO SOMETHING ELSE;
 }
  

и у меня такое чувство, что это не должно быть сделано так. 😉

Я знаю, что могу использовать логические значения вместо этого, но это то же самое и по-другому. Разве нет совершенно другого способа сделать это правильно?

Комментарии:

1. Удалите оператор break

2. equals(String) вместо ==

3. Вы хотите сделать «что-то» для КАЖДОГО совпадения в массиве? Если это так, то вы НЕ МОЖЕТЕ break , потому что break завершит цикл. И вы не можете сделать «что-то еще» до ЗАВЕРШЕНИЯ цикла, потому что вы никогда не узнаете, появится ли строка позже в цикле или нет. например, вы в основном делаете «я наехал на что-то в машине за последние 30 секунд? Нет. Хорошо. Я, вероятно, тоже не буду натыкаться ни на что другое в ближайшие 10 часов «.

4. Можете ли вы сформулировать это в одном четком, кратком вопросе? Вы хотите что-то сделать, если оно содержится как в массиве, так и в списке?

5. итак, вы просматриваете список строк массива, верно? если у меня есть строка «Там», должны ли вы что-то СДЕЛАТЬ, если вы ищете строку «здесь»? или две строки должны быть точно такими же?

Ответ №1:

Самый чистый способ заключается в следующем: объявите метод, который возвращает, находится ли строка в массиве:

 public boolean arrContainsStr(String str, String[] arr) {
    for (int i = 0; i < arr.length; i  ) {
        if (arr[i].equals(str)) {
            return true;
        }
    }
    return false;
}
  

Затем используйте этот метод в своем коде следующим образом:

 String myString;    
String[] myArray;
if (arrContainsStr(myString, myArray)) {
    DO SOMETHING;
}else {
    DO SOMETHING ELSE;
}
  

Это для примитивных строковых массивов. Обратите внимание, что если вы используете ArrayList или аналогичный, вы можете просто использовать .contains(myString) метод, чтобы проверить, содержит ли список вашу строку. Документация здесь: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#contains (java.lang.Объект)

Ответ №2:

Этот вопрос немного странный, но просто прочитав ваше первое предложение, если вы хотите узнать List ArrayList , содержит ли a, например, объект (например, a String ), вы можете просто использовать contains(Object o) метод, а не перебирать. Я, должно быть, упускаю вашу точку зрения. В любом случае, пример:

 String stringToFind = "Foo";
List<String> stringList = new ArrayList<>();
stringList.add("Foo");
if (stringList.contains(stringToFind)) {
    System.out.println("String found");
} else {
    System.out.println("String not found");
}
  

Вывод: строка найдена. (В этом примере).

Ответ №3:

Не могли бы вы использовать .contains , как показано ниже, чтобы проверить, есть ли строка в списке?

 if(arrayList.contains(myString)){
    // DO SOMETHING
} else {
    // DO SOMETHING ELSE
}
  

Ответ №4:

Вы можете установить логическое значение в true, если найдете свое значение, а затем прервать. Если вы не найдете значение, логическое значение останется равным false . Затем вы выполняете if

Ответ №5:

Это немного расплывчато, поэтому я не уверен, что это то, что вы хотите, но если вы удалите разрыв в первом сегменте кода, я думаю, вы получите то, что хотите. вы хотите, чтобы это делало ЧТО-то для каждого вхождения строки или только для первого. также, если вам нужен перерыв, вы можете проверить значение i после завершения цикла, поэтому

 if(i==arrayList.size())
{
    //String found
}
else 
{
    //String not found
}
  

Комментарии:

1. также вам нужен перерыв в цикле, если вы хотите использовать i в качестве тестовой переменной