有一个用例,其中我有一个长的String
可以包含许多
我写了一个正则表达式(< code > "
如:
final String regex = "<img.*?\\\">";
final String string = "Hello World <img src=\"https://dummyimage.com/300.png/09f/777\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/ff2\"> Random Text\nHello\nHello Random <img src=\"https://dummyimage.com/300.png/09f/888\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/2ff\">adaad\n";
final String replace = "";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
final String result = matcher.replaceAll(replace); // Here, how can I collect all the image tags in a list
我们可以使用所谓的Lookaheads和Lookbehinds拆分给定的字符串(有关更多信息,请查看下面提供的参考):
>
(?
<代码>(?
public static final Pattern ANGLE_BRACKETS =
Pattern.compile("(?<=.)(?=<)|(?<=>)(?=.)");
通过使用这种模式,我们在左尖括号和右尖括号边界的空字符串上生成一个子字符串流。然后过滤代表有效图像标签的字符串。
final String string = "Hello World <img src=\"https://dummyimage.com/300.png/09f/777\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/ff2\"> Random Text\nHello\nHello Random <img src=\"https://dummyimage.com/300.png/09f/888\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/2ff\">adaad\n";
List<String> imageTags = ANGLE_BRACKETS.splitAsStream(string)
.filter(str -> str.strip().matches("<img[^<]+>")) // verifying that a string is a valid image tag
.toList();
imageTags.forEach(System.out::println);
关于前瞻和展望的信息
联机演示链接
在正则表达式中,你需要关心开头的尖括号
public static final Pattern IMG_TAG = Pattern.compile("img[^<]+>");
使用 Java 9 方法
Matcher.results(),
我们可以创建一个 MatchResult
对象流,其中包含有关给定字符串中捕获的序列的信息。为了获得匹配的子字符串,我们可以使用 MatchResult.group()。
final String string = "Hello World <img src=\"https://dummyimage.com/300.png/09f/777\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/ff2\"> Random Text\nHello\nHello Random <img src=\"https://dummyimage.com/300.png/09f/888\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/2ff\">adaad\n";
List<String> imageTags = IMG_TAG.matcher(string).results() // Stream<MatchResult>
.map(MatchResult::group) // Stream<String>
.toList();
imageTags.forEach(System.out::println);
输出:
<img src="https://dummyimage.com/300.png/09f/777">
<img src="https://dummyimage.com/300.png/09f/ff2">
<img src="https://dummyimage.com/300.png/09f/888">
<img src="https://dummyimage.com/300.png/09f/2ff">
联机演示链接
您可以简单地这样做:
final List<String> result = new ArrayList<>();
while (matcher.find()) {
result.add(matcher.group());
}
并摆脱最终的字符串替换 = “”;
在一个用例中,我有一个包含许多< code >的长字符串 我写了一个正则表达式(< code > " 例如:
我想迭代一个对象列表。每个对象都包含一些对象的变量。更具体地说: 我的名单是: 所需的映射结构是:
问题内容: 本质上,我想从文件中吸收一行文本,将字符分配给列表,并创建列表中所有单独字符的列表-列表列表。 此刻,我已经尝试过了: 这就是我所拥有的。我不太了解如何提取单个字符并将其分配给新列表。 我从文件中得到的行将类似于: 我想把它变成这个列表,每个单独的字符: 问题答案: 字符串是可迭代的(就像列表一样)。 我的意思是您确实想要这样的东西: 要么 要么 字符将包含文件中的所有字符。
问题内容: 我正在尝试采用一个字符串,并将其附加到列表中包含的每个字符串中,然后使用完成的字符串创建一个新列表。例: 我尝试了循环,并尝试了列表理解,但这是垃圾。一如既往的任何帮助,不胜感激。 问题答案: 最简单的方法是使用列表理解: 请注意,我避免使用内置名称,因为那样会掩盖或隐藏内置名称,这非常不好。 另外,如果您实际上不需要列表,而只需要一个迭代器,则生成器表达式可能会更高效(尽管在短列表中
例如,我有一个类包含name和surname字段。 我想从的中收集一个的(名字和姓氏都在一起),但似乎无法对每个列表使用两次map或无法对每个列表使用两次stream。 我做错了什么?
我有超过15个字符串列表,每个列表包含几个不同的代码。每个列表包含一种特定类型的代码。我有一个输入代码,必须找出该输入代码属于哪个列表,并根据结果返回一个特定字符串。我用if,else if来做这个。下面是示例代码 每个列表如下所示:公共静态列表codeTypeOneList=新ArrayList(); (其他代码类型的类似列表) 有没有更好的方法来实现这一点?谢谢