我的代码存在问题
String[] strLines = null;
while ((strLine = br.readLine()) != null){
strLines = strLine.split("\\s");
System.out.printf("next line - %s\n", strLine);
for(String asd : strLines) {
System.out.printf("array element - %s\n", asd);
}
System.out.println(strLines.length);
}
我尝试从文件中读取程序,然后将所有唯一的单词写入另一个文件。我遇到的问题是strLines数组(我后来转换为Set)会被while循环的每次迭代覆盖。有可能以某种方式附加到这个数组或我应该用另一种方式来存储我的单词吗?
这可能是一个非常初学的问题(我只是不定期编码了几个月),但我无法在任何地方找到答案。提前谢谢!
答案 0 :(得分:4)
没有理由创建一个数组,如果用它做的就是稍后将它转换为一个数组。只需在while循环中添加到您的集合中:
String foo = "foo bar baz foo bar baz";
Set<String> fooSet = new HashSet<>();
fooSet.addAll(Arrays.asList(foo.split("\\s")));
为您的例子
Set<String> fooSet = new HashSet<>();
while ((strLine = br.readLine()) != null){
fooSet.addAll(Arrays.asList(strLine.split("\\s")));
}
答案 1 :(得分:0)
当您不知道阵列的确切大小时,我会使用ArrayList。 ArrayList确实需要在此处给出导入:import java.util.ArrayList
您还需要以某种方式声明它。对于一个完整的字符串列表是这样的:ArrayList<String> arrayListOfStrings = new ArrayList<String>();
对于类型为Object的ArrayList,可以是:ArrayList<Object> arrayListOfObjects = new ArrayList<Object>();
您可以创建任何类型对象的ArrayList。要添加项目,请使用ArrayList&#39; s .add()
功能。 IE:arrayListOfObjects.add(indexOfObject)
ArrayLists也有.get(index)
,.remove(index)
.add(index, Object)
.size()
等等。我希望您在ArrayLists上找到这个简短的教程很有帮助!
答案 2 :(得分:0)
您可以使用List<String>
集合以这种方式存储所有找到的字词:
List<String> words = new ArrayList<>();
while ((strLine = br.readLine()) != null){
String[] strLines = strLine.split("\\s");
words.addAll(Arrays.asList(strLines));
System.out.printf("next line - %s\n", strLine);
}
for(String word: words) {
System.out.printf("word - %s\n", word);
}
System.out.println(words.size());
答案 3 :(得分:0)
非常感谢你的答案!所有这些都非常有用,解决了我在while循环中创建一个集合的问题,如baao所示。