我的代码是假设读取一个由换行符分隔的整数的文件并反向打印出来。只有当第一行中的整数打开时,我的代码才有效,但如果整数用新行分隔,则它会给出这个
打开档案......
文件已打开
在逆序之前[5 12 3 5 4,0]
逆序后[4 5 3 21 5,0]
包含此
的文件 5 12 3 5 4
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();
}
}
答案 0 :(得分:1)
你忘了反转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());
// ...
答案 1 :(得分:1)
仅使用一个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();
}
}
它给出了:
Opening file...
File opened
Before Reverse Order 5 12 3 5 4 0
After Reverse Order 0 4 5 3 21 5
答案 2 :(得分:0)
不要使用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);
答案 3 :(得分:0)
lupz&#39;答案是对的。在arrayList.get(i).reverse();
添加Collections.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();
}
}
}
答案 4 :(得分:0)
我假设您有一个包含许多行的文件,其中每行可以包含由空格分隔的整数。在那种情况下,我会使用split函数来获取每一行的整数。我也假设你不需要检查文件中的值是否实际上是整数。否则你将不得不使用Integer.parseInt(String p)。您可以使用ArrayList arrayList = new ArrayList来跟踪所有整数。然后对于每一行使用arrayList.addAll(Arrays.asList(line.split(“”))。假设每个整数只用一个空格分隔。然后在最后你可以反转arraylist。