Java BufferedReader读取每个换行符的逗号
假设我的代码读取一个由换行符分隔的整数文件,并以相反的方式打印出来。我的代码只有在第一行中的整数为on时才有效,但如果整数被新行分隔,则会给出 正在打开文件 文件打开 在倒序[5 12 3 5 4,0]之前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
在倒序[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()
应在最后
-块中完成。我同意,我使用了操作代码,我没有修改此部分