#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 в качестве тестовой переменной