- Array: Как без цикла узнать содержится ли в массиве элемент?
- Является ли элемент массива числом java
- Java: Проверьте, содержит ли массив значение или элемент
- Вступление
- Массивы.asList().содержит()
- Использование цикла for
- Коллекции.BinarySearch()
- Git Essentials
- Потоковый API Java 8
- Apache Commons – ArrayUtils
- Вывод
- Читайте ещё по теме:
- Определите, является ли строка целым числом в Java
- 9 ответов
Array: Как без цикла узнать содержится ли в массиве элемент?
Как узнать, содержится ли в одномерном массиве единица?
Если конкретнее, то в задаче Задать одномерный массив А, состоящий из N элементов, N—заданное.
Как узнать содержится ли элемент внутри другого элемента?
Добрый день) подскажите пожалуйста как можно узнать содержится ли элемент внутри другого элемента.
Напишите функцию без условия if внутри цикла, которая находит в массиве A элемент, значение которого равно t
Помогите еще решить две оставшихся задачи (использовать готовые методы запрещено). 2. Линейный.
Узнать содержится номер школы в массиве
Надо спросить номер десяти школ. Потом ввести номер своей школы. Если мы уже упоминали этот номер.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
package foooo; import java.util.*; public class ArrToColl { public static Arrays arr; public static ListString> lst;// = new ArrayList(); public static String[] sample; static void Conv(){ lst = arr.asList(sample); } public static void main(String[] args) { sample= new String[3]; String s1 = "berb", s2 = "2523", s3 = "vv", s4 = "not contains"; sample[0] = s1; sample[1] = s2; sample[2] = s3; Conv(); if ( lst.contains(s2) ) System.out.println("YEAP"); } }
заворачивая в лист массив, вы тем самым создаёте ещё один массив но уже в классе контейнере с методами поиска, которые в свою очередь работают тоже через циклы
Является ли элемент массива числом java
Есть массив слов и чисел нада убрать слова??
aaaa
bbbb
4354
34
5442
cccc
Как проверить являетса ли елемент массива числом.
package javaapplication1; public class Main< public static void main(String[] args)< String a[]=; for (int i=0; i else < System.out.println("a["+a[i]+"] - не является числом"); >> > >
Есть еще способ. Это тоже перебирать массив, затем пытаемся перевести строку в число и если это строка, то обработаем(вызовем) ошибку и далее, а если число, то выведем его на экран и т.д.
Есть массив слов и чисел нада убрать слова??
aaaa
bbbb
4354
34
5442
cccc
Как проверить являетса ли елемент массива числом.
А если использовать метод isDigit() класса Character? Используем вложенные циклы: внешний — по строкам, внутренний — по символам. Если во внутреннем цикле найдется не цифровой символ, переходим на следующий шаг во внешнем цикле.
А если использовать метод isDigit() класса Character? Используем вложенные циклы: внешний — по строкам, внутренний — по символам. Если во внутреннем цикле найдется не цифровой символ, переходим на следующий шаг во внешнем цикле.
самый быстрый — пытаться сделать класс-обертку из строки, в случае выброса NumberFormatException — это явно не число.
Регулярные выражения тоже норм, но писать их надо с умом)
такой способ будет при каждом матчинге заного компилировать регулярное выражение, плюс само выражение допускает матчинг пустой строки(квантификатор *).
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение — плюс к премии. Выдал бан — лучший модератор месяца со всеми вытекающими.
Java: Проверьте, содержит ли массив значение или элемент
В этом уроке мы рассмотрим примеры того, как проверить, содержит ли массив Java определенный элемент или значение. Мы будем использовать список, потоковый API, а также Apache Commons.
Вступление
Независимо от того, используется ли Java или любой другой язык программирования, проверка того, содержит ли массив значение, является обычным явлением. Это одна из вещей, которой, как правило, учатся большинство новичков, и это полезная вещь, которую нужно знать в целом.
В этой статье мы рассмотрим как проверить, содержит ли массив значение или элемент в Java .
- Массивы.asList().содержит()
- Использование цикла for
- Коллекции.BinarySearch()
- Потоковый API Java 8
- Apache Commons – ArrayUtils
Массивы.asList().содержит()
Это, пожалуй, самый распространенный способ решения этой проблемы, просто потому, что он действительно хорошо работает и прост в реализации.
Сначала мы преобразуем массив в ArrayList . Существуют различные способы преобразования массива Java в список массивов , однако мы будем использовать наиболее широко используемый подход.
Затем мы можем использовать метод contains() для результирующего ArrayList , который возвращает логическое значение , указывающее, содержит ли список элемент, который мы ему передали, или нет.
Integer[] intArray = new Integer[]; String[] nameArray = new String[]; ListintList = new ArrayList<>(Arrays.asList(intArray)); List nameList = new ArrayList<>(Arrays.asList(nameArray)); System.out.println(intList.contains(12)); System.out.println(nameList.contains("John"));
Выполнение этого кода приводит к:
Использование цикла for
Более простой и ручной подход к решению проблемы заключается в использовании цикла для . В худшем случае он повторит весь массив один раз, проверяя, присутствует ли элемент.
Давайте сначала начнем с примитивных целых чисел:
int[] intArray = new int[]; boolean found = false; int searchedValue = 2; for(int x : intArray) < if(x == searchedValue)< found = true; break; >> System.out.println(found);
Переменная found изначально имеет значение false , потому что единственный способ вернуть true – это найти элемент и явно присвоить логическому значению новое значение. Здесь мы просто сравниваем каждый элемент массива со значением, которое мы ищем, и возвращаем true , если они совпадают:
Для строк и пользовательских объектов, которые могут быть в вашем коде, вы будете использовать другой оператор сравнения. Предполагая, что вы действительно переопределили метод equals () , вы можете использовать его для проверки того, равен ли объект другому, возвращая true , если они:
String[] stringArray = new String[]; boolean found = false; String searchedValue = "Michael"; for(String x : stringArray) < if(x.equals(searchedValue))< found = true; break; >> System.out.println(found);
Выполнение этого кода приведет к:
Коллекции.BinarySearch()
Кроме того, мы можем найти определенное значение с помощью встроенного метода двоичного поиска() из класса Коллекции . Проблема с двоичным поиском заключается в том, что он требует, чтобы наш массив был отсортирован . Если ваш массив | отсортирован, двоичный поиск () превосходит как Arrays.asList().содержит () , так и подходы для цикла.
Если он не отсортирован, дополнительное время, необходимое для сортировки массива, может сделать этот подход менее выгодным, в зависимости от размера массива и алгоритма сортировки, используемого для его сортировки.
двоичный поиск() имеет множество перегруженных вариантов в зависимости от используемых типов и наших собственных требований, но наиболее общим является:
public static int binarySearch(Object[] a, Object[] key)
Где a представляет массив и ключ указанное значение, которое мы ищем.
Теперь возвращаемое значение может немного сбивать с толку, поэтому лучше всего иметь в виду официальную документацию Oracle:
Возвращаемым значением этого метода является индекс искомого ключа, если он содержится в массиве; в противном случае (-( точка вставки ) – 1), где точка вставки определяется как точка, в которой ключ будет вставлен в массив: индекс первого элемента больше ключа или a.длина , если все элементы в массиве меньше указанного ключа.
Integer[] intArray = new Integer[]; String[] nameArray = new String[]; // Array is already sorted lexicographically ListintList = new ArrayList<>(Arrays.asList(intArray)); List nameList = new ArrayList<>(Arrays.asList(nameArray)); System.out.println(Collections.binarySearch(intList, 2)); System.out.println(Collections.binarySearch(nameList, "Robin"));
Первый элемент найден в позиции 1 . Второй элемент не найден и будет вставлен в позицию 5 – в конце массива. Возвращаемое значение равно -(точка вставки)-1 , поэтому возвращаемое значение в конечном итоге равно -6 .
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Если значение выше равно или выше 0 , массив содержит элемент, и в противном случае он его не содержит.
Потоковый API Java 8
API потока Java 8 очень универсален и предлагает лаконичные решения для различных задач, связанных с обработкой коллекций объектов. Использование потоков для такого типа задач естественно и интуитивно понятно для большинства.
Давайте посмотрим, как мы можем использовать API потока, чтобы проверить, содержит ли массив целое число:
Integer[] arr = new Integer[]; System.out.println(Arrays.stream(arr).anyMatch(x -> x == 3));
И для этого используйте строки или пользовательские объекты:
String[] arr = new String[]; String searchString = "Michael"; boolean doesContain = Arrays.stream(arr) .anyMatch(x -> x.equals(searchString)); System.out.println(doesContain);
Или вы можете сделать это короче, используя ссылку на метод:
boolean doesContain = Arrays.stream(arr) .anyMatch(searchString::equals); System.out.println(doesContain);
Оба из них будут выводить:
Apache Commons – ArrayUtils
Библиотека Apache Commons предоставляет множество новых интерфейсов, реализаций и классов, которые расширяют базовую платформу Java и присутствуют во многих проектах.
Класс ArrayUtils представляет множество методов для управления массивами, включая метод contains() :
Integer[] intArray = new Integer[]; String[] nameArray = new String[]; System.out.println(ArrayUtils.contains(intArray, 3)); System.out.println(ArrayUtils.contains(nameArray, "John"));
Вывод
В этой статье мы рассмотрели несколько способов проверки того, содержит ли массив в Java определенный элемент или значение. Мы перешли к преобразованию массива в список и вызову метода contains () , используя цикл for, потоковый API Java 8, а также Apache Commons.
Читайте ещё по теме:
Определите, является ли строка целым числом в Java
Я пытаюсь определить, является ли конкретный элемент в массиве строк целым числом или нет. Я .split(» «)’ing выражение infix в форме String , а затем попытаюсь разбить результирующий массив на два массива; один для целых чисел, один для операторов, отбрасывающий круглые скобки и другие разные элементы. Какой был бы лучший способ сделать это? Я думал, что смогу найти метод Integer.isInteger(String arg) или что-то в этом роде, но не удачу.
Я не понимаю, с несколькими обновлениями Java, такие простые вспомогательные методы не встроены в комплект.
@tony9099 tony9099 это своего рода крайняя ситуация, и из того, что я видел, коснулось того факта, что этот вопрос все еще получает взгляды, довольно уникальный. Принятый обходной путь (который я принял как ответ), вероятно, лучше, чем сделать его стандартом Java.
@Nick Придерживайтесь вашего аргумента о том, что в Java нет необходимости, только один из каждых 772 посетителей решил проголосовать за мой ответ, несмотря на то, что было три полезных решения (по общему признанию, каждое лучше, чем предыдущее). Я думаю, что это четкий индикатор, это крайний случай, когда в большинстве случаев вам лучше изменить способ решения проблемы так, что вам не нужно мое решение вместо того, чтобы фактически использовать его.
9 ответов
Самый наивный способ состоял бы в том, чтобы перебирать строку и убедиться, что все элементы являются действительными цифрами для данного основателя. Это примерно так же эффективно, как возможно, потому что вы должны смотреть на каждый элемент хотя бы один раз. Полагаю, мы могли бы оптимизировать его на основе оснований, но для всех целей и целей это так хорошо, как вы можете ожидать.
public static boolean isInteger(String s) < return isInteger(s,10); >public static boolean isInteger(String s, int radix) < if(s.isEmpty()) return false; for(int i = 0; i < s.length(); i++) < if(i == 0 && s.charAt(i) == '-') < if(s.length() == 1) return false; else continue; >if(Character.digit(s.charAt(i),radix) < 0) return false; >return true; >
В качестве альтернативы вы можете полагаться на библиотеку Java, чтобы иметь это. Это не исключение, и вы поймете почти все условия ошибки, о которых вы можете думать. Это будет немного дороже (вам нужно создать объект Scanner, который в критически плотной петле вы не хотите делать. Но обычно это не должно быть слишком дорогостоящим, поэтому для повседневной работы операции должны быть довольно надежными.
public static boolean isInteger(String s, int radix) < Scanner sc = new Scanner(s.trim()); if(!sc.hasNextInt(radix)) return false; // we know it starts with a valid int, now make sure // there nothing left! sc.nextInt(radix); return !sc.hasNext(); >
Если вам не важны лучшие практики, или вы хотите троллировать парня, который просматривает ваши комментарии, попробуйте это для размера:
public static boolean isInteger(String s) < try < Integer.parseInt(s); >catch(NumberFormatException e) < return false; >catch(NullPointerException e) < return false; >// only got here if we didn't return false return true; >
Вы заметите, что это не проверяет на ноль. Мы готовы позволить исключение нулевого указателя. Если вы хотите справиться с этим, вы можете. Я выбрал не так, а скорее делегировать это.
попробовать / поймать блок для этого? Я думаю, что это немного излишне для этой задачи, так как создание исключения может быть дорогостоящим, и если число строк не является целым числом, то вы получаете расходы.