【发布时间】:2018-05-17 16:53:16
【问题描述】:
我想将一个文件拆分为 8 行,然后将它们放入字符串的 ArrayList 中。
例如这个文件:
public class Example {
private int result = 2 + 1;
private int result2 = 3 * 2;
private int result3 = 3 + 3;
private int result4 = 5 + 1 * 74;
private String a = "This is a string";
System.out.println("Just a print");
int b = 12;
System.out.println("Another print");
}
会导致以下两个条目ArrayList:
ArrayList<String> fileSplitted = { "public class Example {\nprivate int result = 2 + 1;\nprivate int result2 = 3 * 2;\nprivate int result3 = 3 + 3;\n\nprivate int result4 = 5 + 1 * 74;\nprivate String a = "This is a string";\nSystem.out.println("Just a print");" ; "int b = 12;\n\nSystem.out.println("Another print");\n}" }
所以我写了这个函数:
public static ArrayList<String> splitFile(File file) throws FileNotFoundException {
ArrayList<String> fileSplitted = new ArrayList<String>();
ArrayList<String> fileSplittedReturn = new ArrayList<String>();
Scanner input = new Scanner(file);
StringBuilder tmp = new StringBuilder();
int count = 0;
int countTotal = 0;
while (input.hasNextLine()) {
fileSplitted.add(input.nextLine());
}
for (String s : fileSplitted) {
if (count < 8 && countTotal != fileSplitted.size() - 1) {
tmp.append(s);
count++;
} else if (count == 8 && countTotal != fileSplitted.size() - 1) {
fileSplittedReturn.add(tmp.toString());
tmp.setLength(0);
tmp.append(s);
count = 1;
} else if (countTotal == fileSplitted.size() - 1) {
fileSplittedReturn.add(tmp.toString());
}
countTotal++;
}
return fileSplittedReturn;
}
尽管它可以工作(我还没有发现任何错误,但我不能确定),但我认为它有点沉重而且不那么容易阅读。
我有没有办法修饰这个功能,让它更轻量级?
【问题讨论】:
-
你不需要第二个循环。在第一个循环中,将下一行附加到字符串构建器,增加并检查一个计数器,如果它是 8,则刷新字符串构建器 - 将其内容添加到列表中,然后 sb.delete(0, length)。循环后,如果 sb 不为空,则将其内容添加到列表中。
-
count永远只有0或1,因为int count = 0;和count = 1;是唯一的分配。 -
我相信这可以匹配
CodeReview堆栈交换
标签: java string file arraylist