2017-05-02 29 views
0

我有一个问题,这个代码追加到数组中的Java

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

* strLines数组(后来我转换为Set)*以后不要将它转换为Set。相反,在循环之前创建一个空集,并将您读取的每个词添加到该集。 strLines数组应该在循环中声明。它应该被命名为“单词”,因为它是一个数组......单词。 –

回答

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"))); 
} 
0

当你不知道你的数组的确切大小可能是,我使用ArrayList。 ArrayList确实需要这里给出的导入:import java.util.ArrayList您还需要以某种方式声明它。对于一个完整的字符串的ArrayList是这样的:ArrayList<String> arrayListOfStrings = new ArrayList<String>();对于Object类型的ArrayList应该是这样的:ArrayList<Object> arrayListOfObjects = new ArrayList<Object>();您可以创建任何类型的对象的ArrayList。要添加项目,请使用ArrayList的.add()函数。 IE:arrayListOfObjects.add(indexOfObject) ArrayLists也有.get(index),.remove(index).add(index, Object).size()等。我希望你能在ArrayLists上找到这个简短的教程很有帮助!

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()); 
0

非常感谢您的答案!所有这些都非常有帮助,解决了我在while循环中创建一个集合的问题,建议使用baao

+0

请不要发布这样的消息作为答案。答案应该只是答案。相反,upvote你认为有用的答案,并可以发表感谢评论这些答案。 –