Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader读取每个换行符的逗号_Java_Arraylist_Bufferedreader - Fatal编程技术网

Java BufferedReader读取每个换行符的逗号

Java BufferedReader读取每个换行符的逗号,java,arraylist,bufferedreader,Java,Arraylist,Bufferedreader,假设我的代码读取一个由换行符分隔的整数文件,并以相反的方式打印出来。我的代码只有在第一行中的整数为on时才有效,但如果整数被新行分隔,则会给出 正在打开文件 文件打开 在倒序[5 12 3 5 4,0]之前 在倒序[45 3 21 5,0]之后 与包含此 512354 0 如何使我的代码改为显示:0 4 5 3 21 5 下面是我的代码 public static void main(String[] args) throws Exception { String line =null

假设我的代码读取一个由换行符分隔的整数文件,并以相反的方式打印出来。我的代码只有在第一行中的整数为on时才有效,但如果整数被新行分隔,则会给出

正在打开文件

文件打开 在倒序[5 12 3 5 4,0]之前
在倒序[45 3 21 5,0]之后

与包含此

512354
0

如何使我的代码改为显示:0 4 5 3 21 5

下面是我的代码

public static void main(String[] args) throws Exception {

    String line =null;
    ArrayList<StringBuilder> arrayList = new ArrayList<StringBuilder>();
    System.out.println("Opening file... \n");
    try 
    {
        BufferedReader in = new BufferedReader(new FileReader(new File("file.txt")));
        System.out.println("File opened");

        while((line = in.readLine()) != null && line.length()!= 0)  {
            //String[] input = line.split(" ");
            arrayList.add(new StringBuilder(line));
        }
        in.close();


        System.out.println("Before Reverse Order " + arrayList);

        for(int i = 0; i < arrayList.size(); i++) {
              arrayList.get(i).reverse();
    }

        System.out.println("After Reverse Order " + arrayList);
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}
publicstaticvoidmain(字符串[]args)引发异常{
字符串行=null;
ArrayList ArrayList=新的ArrayList();
System.out.println(“打开文件…\n”);
尝试
{
BufferedReader in=新的BufferedReader(新文件读取器(新文件(“File.txt”)));
System.out.println(“文件已打开”);
而((line=in.readLine())!=null和&line.length()!=0){
//字符串[]输入=行。拆分(“”);
添加(新的StringBuilder(行));
}
in.close();
System.out.println(“逆序前”+arrayList);
对于(int i=0;i
您忘了反转arrayList本身。只能反转每个StringBuilder

Collections.reverse(arrayList);
不管怎么说,列表似乎根本没有用。只需直接附加到StringBuilder。像这样的事情应该可以做到:

// ...
StringBuilder sb = new StringBuilder();
while((line = in.readLine()) != null && line.length()!= 0)  {
    sb.append(line);
}
in.close();

System.out.println(sb.reverse().toString());

// ...

不要使用readLine。可以使用read()函数。它给人以魅力。您可以手动检查“\n”或“”字符。这行:

 int c = r.read();
    while (c != -1){
        char ch = (char)c;
        if (ch == '\n' || c == ' '){
            String num = buf.toString().trim();
            if (num.length() > 0){
                arrayList.add(new StringBuilder(num));
            }
            buf.delete(0, buf.length());
        } else {
            buf.append(ch);
        }
        c = r.read();
    }
    String num = buf.toString().trim();
    if (num.length() > 0){
        arrayList.add(new StringBuilder(num));
    }

而且,您还应该调用
Collections.reverse(arrayList)

仅使用一个
StringBuilder
,在每行之间添加空格:

public static void main(String[] args) throws Exception {

    String line =null;
    StringBuilder s = new StringBuilder();
    System.out.println("Opening file... \n");
    try 
    {
        BufferedReader in = new BufferedReader(new FileReader(new File("file.txt")));
        System.out.println("File opened");

        while((line = in.readLine()) != null && line.length()!= 0)  {
           s.append(line);
           s.append(" ");
        }
        in.close();


        System.out.println("Before Reverse Order " + s);

        s.reverse();

        System.out.println("After Reverse Order " + s);
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}
它给出:


正在打开文件。。。
文件打开
在倒序5 12 3 5 4 0之前
在倒序0 4 5 3 21 5之后

lupz的答案是正确的。在
arrayList.get(i).reverse()之前或之后添加
集合。反向(arrayList)

完整文件如下:

import java.io.*;
import java.util.*;
public class test {

public static void main(String[] args) throws Exception {

    String line =null;
    ArrayList<StringBuilder> arrayList = new ArrayList<StringBuilder>();
    System.out.println("Opening file... \n");
    try 
    {
        BufferedReader in = new BufferedReader(new FileReader(new File("file.txt")));
        System.out.println("File opened");

        while((line = in.readLine()) != null && line.length()!= 0)  {
            //String[] input = line.split(" ");
            arrayList.add(new StringBuilder(line));
        }
        in.close();


        System.out.println("Before Reverse Order " + arrayList);

        for(int i = 0; i < arrayList.size(); i++) {
              arrayList.get(i).reverse();
    }
    Collections.reverse(arrayList);

        System.out.println("After Reverse Order " + arrayList);
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}
}
import java.io.*;
导入java.util.*;
公开课考试{
公共静态void main(字符串[]args)引发异常{
字符串行=null;
ArrayList ArrayList=新的ArrayList();
System.out.println(“打开文件…\n”);
尝试
{
BufferedReader in=新的BufferedReader(新文件读取器(新文件(“File.txt”)));
System.out.println(“文件已打开”);
而((line=in.readLine())!=null和&line.length()!=0){
//字符串[]输入=行。拆分(“”);
添加(新的StringBuilder(行));
}
in.close();
System.out.println(“逆序前”+arrayList);
对于(int i=0;i
我假设您有一个包含多行的文件,其中每行可以包含由空格分隔的整数。在这种情况下,我将使用split函数来获取每行上的整数。我还假设您不需要检查文件中的值是否为整数。否则,您将不得不使用Integer.parseInt(字符串p)。您可以使用ArrayList ArrayList=new ArrayList跟踪所有整数。然后对每一行使用arrayList.addAll(Arrays.asList(line.split(“”))。假设每个整数只由一个空格分隔。那么最后您可以反转arraylist。

谢谢,我想我根本不需要arraylist。如果不附加空格,两个连续的行将没有任何分隔符。
try/catch
-块很重要。
in.close()
应在
最后
-块中完成。我同意,我使用了操作代码,我没有修改此部分