Ищите regexp в Java arraylist

Учитывая рисунок, вы не можете «выровнять» элементы в редакторе дизайна, используя RelativeLayout.

Послушайте, вы, вероятно, говорите о ConstraintLayout. С ConstraintLayout вы можете выравнивать элементы и ограничивать их там, где вам нужно.

https://developer.android.com/training/constraint-layout Ознакомьтесь с этим руководством.

А также, в настоящее время не так много людей используют RelativeLayout, так как он немного сложен, имеет больше проблем с производительностью, чем ConstraintLayout.

15
задан kmilo 20 November 2008 в 23:25
поделиться

5 ответов

Herms разобрался в основах. Если Вы хотите Строки, а не индексы затем можно улучшиться при помощи цикла foreach Java 5:

import java.util.regex.Pattern;
import java.util.ListIterator;
import java.util.ArrayList;

/**
 * Finds the index of all entries in the list that matches the regex
 * @param list The list of strings to check
 * @param regex The regular expression to use
 * @return list containing the indexes of all matching entries
 */
List<String> getMatchingStrings(List<String> list, String regex) {

  ArrayList<String> matches = new ArrayList<String>();

  Pattern p = Pattern.compile(regex);

  for (String s:list) {
    if (p.matcher(s).matches()) {
      matches.add(s);
    }
  }

  return matches
}
16
ответ дан 1 December 2019 в 01:53
поделиться

Одна опция состоит в том, чтобы использовать Apache палата общин CollectionUtils "избранный" метод. Необходимо было бы создать объект Предиката (объект с синглом "оценивают" метод, который использует регулярное выражение, чтобы проверить на соответствие и возвратить TRUE или FALSE), и затем можно искать объекты в списке то соответствие. Однако это не возвратит индексы, это возвратит набор, содержащий сами объекты.

4
ответ дан 1 December 2019 в 01:53
поделиться

Существует ли встроенный метод? Не то, чтобы я знаю о. Однако должно быть довольно легко сделать это самостоятельно. Вот некоторый полностью непротестированный код, который должен дать Вам основную идею:

import java.util.regex.Pattern;
import java.util.ListIterator;
import java.util.ArrayList;

/**
 * Finds the index of all entries in the list that matches the regex
 * @param list The list of strings to check
 * @param regex The regular expression to use
 * @return list containing the indexes of all matching entries
 */
List<Integer> getMatchingIndexes(List<String> list, String regex) {
  ListIterator<String> li = list.listIterator();

  List<Integer> indexes = new ArrayList<Integer>();

  while(li.hasNext()) {
    int i = li.nextIndex();
    String next = li.next();
    if(Pattern.matches(regex, next)) {
      indexes.add(i);
    }
  }

  return indexes;
}

у меня могло бы быть использование частей Шаблона и ListIterator немного неправильное (я никогда не использовал ни одного), но это должно дать основную идею. Вы могли также сделать простое для цикла вместо цикла с условием продолжения по итератору.

8
ответ дан 1 December 2019 в 01:53
поделиться

Я не полагаю, что существует Java API способ сделать это, и при этом нет Apache палаты общин способ сделать это. Это не было бы трудно к самокрутке как бы то ни было.

1
ответ дан 1 December 2019 в 01:53
поделиться

Это будет возрождение потока, но могло бы быть полезно для кого-то. Вам, возможно, не понадобились бы индексы, вероятно, следующий шаг сделает что-то на объектах, которые соответствовали regex, и поэтому Вы попросили индексы. Но можно использовать потоки Java8 и лямбда-выражение:

  import java.util.regex.Pattern;
  import java.util.stream.Collectors;
  import java.util.List;

  ...

  var pattern = Pattern.compile(define);  // var is Java 10 feature

  List<String> list = originalList
      .stream()
      .filter(e -> pattern.matcher(e).matches())
      .collect(Collectors.toList());

можно взять исходный список, преобразовать его в поток, выполнить фильтр на нем который лямбда выполнений соответствовать шаблону и преобразовать его назад в Список. Но можно сохранить его как поток и выполнить .foreach на нем с другим лямбда-выражением.

0
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: