正则表达式搜索字符串数组

时间:2017-04-28 06:46:37

标签: java arrays

考虑Java中定义的数组中的以下字符串

source ~/.rvm/scripts/rvm
  • 如果用户输入G1 G12 G1-G2 G23 ,则程序应返回G1G1 - >的索引。 G1-G2
  • 如果用户输入[0, 2],程序应返回索引G2 - > G1-G2
  • 如果用户输入[2],该程序应返回G12 - >的索引。 G12
  • ...

一种简单的方法是使用[1]标记每个数组元素,然后对每个元素使用'-'。这意味着O(n ^ 2)算法。有没有更好的方法来使用正则表达式,以便在一个循环中,程序搜索模式并使用equals()作为分隔字符?

1 个答案:

答案 0 :(得分:2)

解决方案是使用以下正则表达式;

.*(?=\b{value}\b).*

所以,例如,如果您希望根据您的要求捕获G1;

.*(?=\bG1\b).*

正在使用\b,一个单词的开头或结尾的锚点,非常适合您的要求。有关单词边界锚\bhere

的更多信息 在Java中

我有以下代码要测试;

static List<String> list = Arrays.asList("G1", "G12", "G1-G2", "G23");
public static void main(String[] args) throws Exception {
    new ArrayList<>(Arrays.asList("G1", "G12", "G2", "G23")).forEach(s -> func(s));
}

static void func(String input) {
    String regex = ".*(?=\\b" + input + "\\b).*";
    System.out.println(input + " contained in -> " 
                       + Arrays.toString(IntStream.range(0, list.size())
                                       .filter(i -> list.get(i).matches(regex))
                                       .toArray()));
}

导致;

G1 contained in -> [0, 2]
G12 contained in -> [1]
G2 contained in -> [2]
G23 contained in -> [3]

要查看代码,here