我基本上需要知道是否可以将1个arrayList更改为另一个arrayList,然后关联arrayList 1中的哪个项目,来自arrayList 2的项目来自,而不使用模式查找器。这很难解释,所以让我们用一个简单的例子来说明:
给定文件输入:
Feline:
Cat Lion
Cheetah
Canine:
Dog
Wolves Fox
我使用以下方法将文件拆分为每个段落:
String strLine;
String [] paragraph = strLine.split("");
从这里我通过在高级for循环中使用add方法将每个项添加到arrayList。
这应该让我们得到第一个arrayList:
[Feline: Cat Lion Cheetah, Canine: Dog Wolves Fox]
从那里需要将每个项目分成单独的单词,使用正则表达式\\ s +。使用另一个高级for循环应该很容易。
这应该给我们留下第二个arrayList:
[Feline:, Cat, Lion, Cheetah, Canine:, Dog, Wolves, Fox]
我需要知道的是,无论如何我都能让程序意识到第二个arrayList中的Cheetah这个词来自第一个arrayList中的第一个项目,而不必搜索第一个arraylist中的第二个项目数组列表。关键在于一个arrayList中的一个项来自另一个arrayList。
我基本上需要这样做,因为我的方法取决于每个段落的第一个单词是什么,每个段落都做了不同的事情。
如果我的解释令人困惑并且对不良术语感到抱歉,请告诉我,我无法解释我的问题。
如果可以,请告诉我如何解决我的问题。
此致
答案 0 :(得分:2)
当你根据空格字符进行拆分时,我建议保留初始数组列表的位置。例如,您可以按如下方式定义对象;
public class MyWord
{
private int pos;
private String word;
public MyWord(int pos,String word)
{
this.pos = pos;
this.word = word;
}
//getters and setters
}
然后当你分手时,你可以做这样的事情;
List<MyWord>secondList = new ArrayList<MyWord>();
for(int i=0;i<firstList.size();i++)
{
String[]words = firstList.get(i).split("\\s");
for(String wordToAdd : words)
{
MyWord w = new MyWord(i,wordToAdd);
secondList.add(w);
}
}
所以现在你的第二个列表将有一个包含该单词的对象以及它包含在第一个列表中的原始索引。
跳这有帮助。
答案 1 :(得分:1)
你的计划永远不会“实现”任何事情。每个Java集合都有一个指定的语义,它们不会再记录它们所做的事情。
java.util.List
存储有序的对象列表。它不会检测重复项。它不与任何其他东西保持联系。你可以问一个列表'你包含X'吗?使用contains
方法。这需要时间与列表中的事物数量成比例。
当您将String
个对象存储在列表中时,并不存在它们来自何处的概念。它们就在列表中。如果您需要第二个列表来包含与第一个列表相关的项目,则需要对其进行编码。如果 all 第二个列表需要存储的是第一个列表的相关性,它可能是List<Integer>
,并且对于每个项目,您在第一个列表中搜索它以获取索引。所以,是的,当您处理第二个列表的每个项目时,您需要扫描第一个列表以查看它是否/在哪里。如果第一组中没有提到第二组中的某些内容,那么从你的问题中不清楚你想要发生什么。