我看过多个不同的答案和问题,但似乎没有人给出我想要的结果。我的问题是我有一个.txt文件,其中包含426458个状态(无视规则)的noughts和十字架,格式如下所示。
[E][E][E]
[E][E][E]
[E][E][E]
[X][X][X]
[O][O][O]
[E][E][E]
我使用以下方法加载文件:
Scanner sc = new Scanner(new File("src/AllPlayerOneStates.txt"));
sc.useDelimiter("\r");
List<String> lines = new ArrayList<String>();
while (sc.hasNextLine()) {
lines.add(sc.next());
}
这会创建一个列表,其中每个元素都是一个状态,然后我想创建一个没有重复状态的新列表。
我已经尝试过使用StringBuilder简单地输出所有独特的状态,但是它给了我一个比预期少得多的数字,以及循环遍历每个元素并将其与其他所有元素进行比较但是我可能做错了,因为它告诉我独特状态的数量大于426458.我对编程比较陌生。
答案 0 :(得分:3)
这创建了一个数组,每个元素都是一个状态,然后我会 喜欢创建一个没有重复状态的新数组。
尝试以下方式:
Set<String> set = new HashSet<String>(lines);
List<String> newList = new ArrayList<String>(set);
此处newList
是您的新状态列表,不包含重复项。
答案 1 :(得分:2)
您可以使用Set
代替List
,它会删除重复项,例如:
Set<String> lines = new HashSet<String>();
while (sc.hasNextLine()) {
lines.add(sc.next());
}
此while
循环结束后,lines.size()
会为您提供一些唯一规则。
如果您想保留订单,可以使用LinkedHashSet
代替HashSet
。