gpt4 book ai didi

java - 如何合并arraylist元素?

转载 作者:行者123 更新时间:2023-12-02 08:32:26 26 4
gpt4 key购买 nike

我有一个字符串示例 =“此站点包含《Java 开发人员年鉴》等中的所有示例。将这些示例直接复制并粘贴到您的应用程序中”

在 token 之后并在字符串示例上执行一些我想要的操作,我有像这样的数组列表:

ArrayList <token > arl = " "this site holds ", "holds all the examples ", "the examples from The Java Developers", " Copy and paste " )

“此站点包含”,我知道字符串测试中的开始和结束位置:star = 1 end = 3“包含所有示例”,我知道位置 stat = 3 end = 6, “来自 Java 开发人员的示例”,我知道位置 stat = 5 end =10, “复制并粘贴”我知道位置 stat = 14 end = 17,

我们可以看到,arl 中的某些元素重叠:“此站点包含”,“包含所有示例”,“来自 Java 开发人员的示例”。

这里的问题是如何将重叠元素合并到接收的数组列表中,例如

ArrayList 结果 =""此站点包含来自 Java 开发人员的所有示例",""复制并粘贴"";

这是我的代码:但如果检查元素重叠,它只会合并第一个元素

public ArrayList<TextChunks> finalTextChunks(ArrayList<TextChunks> textchunkswithkeyword) {
ArrayList<TextChunks > result = (ArrayList<TextChunks>) textchunkswithkeyword.clone();
//System.out.print(result.size());
int j;
for(int i=0;i< result.size() ;i++) {
int index = i;
if(i+1>=result.size()){
break;
}
j=i+1;
if(result.get(i).checkOverlapingTwoTextchunks(result.get(j))== true) {
TextChunks temp = new TextChunks();
temp = handleOverlaping(textchunkswithkeyword.get(i),textchunkswithkeyword.get(j),resultSearchEngine);
result.set(i, temp);
result.remove(j);
i = index;
continue;
}
}
return result;
}
}

衷心感谢

最佳答案

下面应该可以做到这一点,或者至少说明了合并 block 的想法。基本上我正在销毁现有的 block 并重新创建新的 block 。听起来很可怕,但简化了很多。我只是将单词存储在列表中并迭代该单词列表以构建新的(合并的!) block 。

private List<TextChunks> finalTextChunks(List<TextChunks> textchunkswithkeyword) {

private List<TextChunks> result = new ArrayList<TextChunk>();
private List<String> wordList = new ArrayList<String>();

// store all words in an arraylist, words are stored at their correct positions,
// ignored words from the original text are represented by null entries
for (TextChunks chunk : textchunkswithkeyword) {
int start = chunk.getStartTextchunks();
List<Token> tokens = chunk.getTokens(); // TODO - implement getTokens() in TextChunks class
for (int i = 0; i < tokens.length; i++) {
wordList.set(start+i, tokens.get(i).toString()); // TODO - overwrite toString() in Token class
}
}

// recreate the chunks
int start = 0;
boolean isChunk = false;
StringBuilder chunkBuilder;

for (int i = 0; i < wordList.size(); i++) {
String word = wordList.get(i);
if (word == null) {
if (isChunk) {
// end of chunk detected
TextChunk chunk = new TextChunk(chunkBuilder.toString().split(" "), start, i);
result.add(chunk);
isChunk = false;
} else {
// do nothing
}
} else {
if (isChunk) {
// chunk gets longer by one word
chunkBuilder.append(" ").append(word);
} else {
// new chunk starts here
chunkBuilder = new StringBuilder(word);
start = i;
isChunk = true;
}
}
if (isChunk) {
// create and add the last chunk
TextChunks chunk = new TextChunk(chunkBuilder.toString(), start, wordList.size()-1);
result.add(chunk);
}
return result;
}

(警告 - 绝对没有经过测试,我手边既没有 IDE,也没有编译器)

编辑

更改了代码 - 你说 TextChunk 类保存一个标记(单词?)数组。这只是三个简单的修改。

编辑2

最终编辑 - 我部分地调整了我的代码以适应您的类(class)。 需要做什么:

  1. 在 TextChunks 中实现 getTokens() 方法,该方法仅返回 arrt 字段
  2. 实现一个 TextChunks 构造函数,它接受一个字符串(以空格分隔的单词)、开头和结尾。您的 Token 类已经提供了一个静态方法来转换 token 数组列表中的字符串
  3. 覆盖Token类中的toString()方法,以便仅返回 token 字符串。

关于java - 如何合并arraylist元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2954944/

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