我想从文件中读取每一行并将每一行存储到一个字符串数组
while ((line = br.readLine()) != null) {
int i = 0;
String[] sArray = new String[line.length()];
sArray[i] += line;
System.out.println(sArray[i]);
i++;
}
输出:
nullKNZAVM
nullCPKCCA
nullKMUAXP
为什么它在每组字母之前打印为空。
答案 0 :(得分:2)
你正在这样做:为什么它在每组字母 ??
之前打印为null
String[] sArray = new String[line.length()];
sArray[i] += line;
所以你创建了一个大小为line.length()元素的数组,但是没有初始化所有这些元素。现在因为String是一个对象,非初始化的默认值是null
所以数组中的每个元素都是null
执行sArray[i] += line;
与将*连接到行...
答案 1 :(得分:1)
由于这一行:
sqldf
由于元素是library(sqldf)
sqldf("select Event,
min(Time) as mintime,
max(Time) as maxtime,
sum(Type=='New') as New,
sum(Type=='Repeat') as Repeat
from df
group by Event")
(如in,undefined或unitialised),当你使用串联 Event mintime maxtime New Repeat
1: A1 10 21 2 3
时,它会将sArray[i] += line;
的值转换为String" null& #34 ;.所以你将你的行连接到字符串" null",以获得你正在看到的输出。
如果您不想要,请改为指定:
null
答案 2 :(得分:1)
您认为sArray[i]
之前+=
字符串line
是什么意思?
当然是空的!
试试看:
String N = null;
String M = N + "something";
System.out.println(M);
使用Java String +=
运算符编译为使用下面的StringBuilder
。但是每个元素首先运行String.valueOf()
。
String.valueOf(null)
将"null"
作为字符串返回。
因此评估为:
String N = null;
String M = StringBuilder.append(N).append("something").toString();
System.out.println(M);
反过来又会给你:
String M = StringBuilder.append(null).append("something").toString();
最终会给你:
String M = StringBuilder.append("null").append("something").toString();
PS。为数组分配不正确的长度是一个单独的问题。每个String的长度和数组的长度是两个不同的概念。
答案 3 :(得分:0)
为什么不这样做?
int line = 0;
for (String line = br.readLine(); line != null; line = br.readLine()) {
//...
}