如何在ArrayList java中添加一个新行

时间:2015-01-07 18:43:45

标签: java file

如何在java String数组中输入新行。   例如我的输入文件是:

   Student learns programming 
   java.Teacher rates 
   student.Nero gets ten.

并且输出在一行中。    输出:

  Student learns programming java.Teacher rates student.Nero gets ten.

我使用的代码是:

 File f=new File(s3);
      File _if=new File(s2);

      File _dic=new File(s4);
      f.createNewFile();

      FileInputStream _inputfile=new FileInputStream(_if.getAbsolutePath());
      BufferedReader _readfile=new BufferedReader(new InputStreamReader(_inputfile));
      String _str=_readfile.readLine();
      FileWriter _filewrite=new FileWriter(f);
      BufferedWriter _buffwrt=new BufferedWriter(_filewrite);
      int sum=0,sum2=0;
      ArrayList<String> _array=new ArrayList<String>();
            while (_str != null) {

                String[] _vect = _str.split(" ");
                int i;


                for (i = 0; i < _vect.length; i++) {

                    _array.add(_vect[i]);}


                _str =_readfile.readLine();



            }

4 个答案:

答案 0 :(得分:1)

您可以使用Apache Commons IO

查看this方法,该方法直接读取文件列表。

答案 1 :(得分:0)

你可以在for循环后为arraylist添加一个“\ n”字符串:

for (i = 0; i < _vect.length; i++) {
    _array.add(_vect[i]);
}
_array.add("\n");//this will add a new line character to the arraylist

答案 2 :(得分:0)

我不会将换行符添加为列表中的String,而是将换行符附加到String本身:

for (i = 0; i < _vect.length; i++) {
    _array.add(_vect[i] + "\n");
}

我不认为通过在String上将换行符List作为唯一条目来浪费内存分配是一个好主意。

答案 3 :(得分:0)

如果此作业的全部意图是读取文件并将其写回,那么您根本不需要ArrayList。你可以这样做:

while ( _str != null ) {
    _buffwrt.write( _str );
    _buffwrt.newLine();
}

这只是从输入文件中读取每一行并将其写回输出文件。

但我怀疑,从您的代码中,您确实想要对此文件中的单词执行某些操作。你没有解释你在做什么。也许你想要数数,或者你想将它们翻译成某种东西。

但重要的是,您不必将整个文件的所有单词一起保存在ArrayList中。您应该分别为每一行执行此操作。您甚至可以直接使用拆分阵列。例如,以下是如何计算整个文件的单词,并且仍然分别编写每一行。

int sum = 0;

while ( _str != null ) {


    String[] _vect = _str.split(" ");
    sum += vect.length;

    _buffwrt.write( _str );
    _buffwrt.newLine();
}

这会在读取每一行后将每行中的单词数添加到单词总数中。但它仍然像以前一样将原始行写入输出文件。

如果您要做的是更改单词并将其写回更改,您可以执行以下操作:

while ( _str != null ) {


    String[] _vect = _str.split(" ");

    for ( int i = 0 ; i < _vect.length; i++ ) {

        // Change _vect[i] in some way

        _vect[i] = ....;

        // Write a space if it's not the first word
        if ( i != 0 ) {
           _buffwrt.write( ' ' );
        }

        _buffwrt.write(vect[i]);

     }

    _buffwrt.newLine();
}

你在这里做的是分割线,处理每个单词,然后将其写入输出文件。如果它不是第一个单词,你也可以在它之前写一个空格。

这里重要的一点是不要一起收集文件中的所有单词,然后尝试记住属于哪一行的单词,或者添加ArrayList的换行符,这些换行符不是单词,可能会影响你的程序的逻辑。相反,分别处理每一行,并单独编写,然后您可以在处理结束时添加换行符。