将正则表达式应用于Java8 List <string>

时间:2017-08-15 09:53:18

标签: regex java-8

我有一个数组列表

List<String> items = Arrays.asList("date=2017-01-10", "date=2017-02-10");

我想转换此列表,并为列表中的每个项目添加引号  date=2017-01-10可以转换为date='2017-01-10'

List<String> items = Arrays.asList("date='2017-01-10'", "date='2017-02-10'");

我如何在Java 8中完成?

更新:我想使用正则表达式来实现这一点。

3 个答案:

答案 0 :(得分:2)

我看过你的个人资料,我发现你开始使用Java。所以我只是为了学习目的而给你答案。

  • 使用lookbehind来跳过替换。例如:(?<==)
  • 使用group来捕获组中的匹配结果,例如:(.+)
  • 使用$符号来引用捕获的组,例如:$1

    List<String> result = items.stream()
    //                                 match `=`            ---v
                               .map(it -> it.replaceFirst("(?<==)(.+)", "'$1'"))
    //                     capture the rest substring in group  ---^
                               .collect(Collectors.toList());
    

您也可以使用String#substring来实现自己的方式。例如:

int prefix = "date=".length();
List<String> result =items.stream()
                          .map(it->String.format("date='%s'",it.substring(prefix)))
                          .collect(Collectors.toList());

答案 1 :(得分:2)

您可以将replaceAll与此正则表达式^(.*?)=(.*?)$一起使用,后面的=之后返回两个组,因此您可以将组1 $1替换为输入通过='然后在两个引号'$2'之间的第2组:

List<String> items = Arrays.asList("date=2017-01-10", "date=2017-02-10");
items = items.stream()
        .map(t -> t.replaceAll("(.*?)=(.*?)$", "$1='$2'"))
        .collect(Collectors.toList());

items.forEach(System.out::println);

<强>输出

date='2017-01-10'
date='2017-02-10'

答案 2 :(得分:0)

您可以使用以下代码

    List<String> items = Arrays.asList("date=2017-01-10", "date=2017-02-10"), result = new ArrayList<String>();
    for(String item : items){
        item = item.replace("date=", "date='");
        item = item + "'";
        result.add(item);
    }
    for(String item : result){
        System.out.println(item);
    }

demo