gpt4 book ai didi

java - 借助 map 在数组列表中查找和替换

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:06 27 4
gpt4 key购买 nike

我有 2 个如下所示的列表。

List<String> list1 = Arrays.asList("I'm a cat", "dog", "There's an elephant and I'm seeing", "we're five");

List<String> list2 = Arrays.asList("I'm", "There's", "we're");

和如下的 HashMap 。

"I'm": "I am"
"we're": "we are"
"There's": "there is"

这里我需要用字典值更新我的list1。即它应该是这样的

"I am a cat", "dog", "There is an elephant and I am seeing it", "we are five"

这里我的主要问题是我提供的 list1 有接近 80K 个句子,而 map 有 4k 个值。在这里,我能够生成所有 list1list2map 。但由于它非常大,我无法找到一种有效的方法来进行查找和替换。

我想过通过将列表转换为数组来使用 commons StringUtils.replaceAll(),但问题又是我需要循环遍历所有 80k 项 * 4k 次(甚至更多,因为它们是语句而不是单个单词字符串)。

我该怎么做?

最佳答案

这是另一个版本,我找到了这个post并稍微修改了程序...

Map <String, String> tokenMap = new HashMap <> ();
tokenMap.put("I'm", "I am");
tokenMap.put("We're", "We are");

String [] array = {"I'm at home" , "We're playing football"};

String content = Arrays.toString(array).substring(1, Arrays.toString(array).length() - 1);
String regex = StringUtils.join( tokenMap.keySet(), "|");
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);

StringBuffer buffer = new StringBuffer();

while(matcher.find())
{
matcher.appendReplacement(buffer, tokenMap.get(matcher.group(0)));
}

matcher.appendTail(buffer);
array = buffer.toString().split(", ");

我不知道它的效率如何,我只用很少的元素测试了它......

关于java - 借助 map 在数组列表中查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50316192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com