这段代码有什么问题。保持打印无效

时间:2017-11-09 19:55:13

标签: java

我想从文件中读取每一行并将每一行存储到一个字符串数组

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

为什么它在每组字母之前打印为空。

4 个答案:

答案 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()) {
//...
}