将多个字符串分配给单个变量

时间:2019-02-07 01:31:19

标签: java string variables

因此,我正在研究保龄球计算器任务,该任务需要一系列输入并计算得分。我的老师提供的测试输入包含许多测试用例,这些用例表示需要计算多少个字符串才能得分。我遇到的问题是我无法将所有3个字符串(有3个测试用例)放入一个单独的字符串中,并在不同的行上分开。

这是输入:

3 -,-,-,-,-,-,-,-,-,-

X,X,X,X,X,X,X,X,X,XXX

X,13,X,81,5 /,X,18,33,X,X36

我正在尝试将其设置为这样的格式:

-,-,-,-,-,-,-,-,-

X,X,X,X,X,X,X,X,X,XXX

X,13,X,81,5 /,X,18,33,X,X36

但是,当我运行代码时,将其作为输出:

-,-,-,-,-,-,-,-,-,- X,X,X,X,X,X,X,X,X,XXX X,13,X,81,5 /,X,18,33,X,X36

这是我到目前为止所掌握的。

import java.io.*;
import java.util.*;

public class Bowling {
  public static void main(String[] args)  throws FileNotFoundException {
    File inFile = new File("input.txt");
    Scanner scanFile = new Scanner(inFile);

    int tc = scanFile.nextInt();
    String N = "";


    for (int i=0; i < tc; i++)
        N += scanFile.next();
    System.out.println(N);
  }
}

**更新:谢谢大家的回答,由于您的回答,我学到了很多东西。在问这个问题时,我被这个问题束缚了,并没有直截了当。我再次查看代码,意识到我所要做的就是在将字符串添加到变量之前添加以下行:

N += "\n";

再次感谢所有发表评论的人。

4 个答案:

答案 0 :(得分:3)

如果要使用大量的String,我建议使用StringBuilder。但是在循环的每次迭代中,您都可以添加换行符:

StringBuilder sb = new StringBuilder();
for (int i=0; i < tc; i++) {
    sb.append(scanFile.next());
    sb.append("\n");
}
System.out.println(sb);

答案 1 :(得分:1)

可以:

•创建一个String []数组

•使用分隔符,例如\ t

•使用其他方法

此外,别忘了说您要我们告诉您如何使用换行符。

答案 2 :(得分:1)

我很想在您的情况下使用StringJoiner,我完全同意@GBlodgett的回答。但这也可以作为替代。

在javadoc中,

  

StringJoiner用于构造分隔的字符序列   用定界符

这完全适合您的情况。您的循环显示为

StringJoiner sj= new StringJoiner("\n"); // Here, "\n" is the delimiter between every join.

for (int i=0; i < tc; i++){
       sj.add(scanFile.next());
}
System.out.println(sj.toString());

此外,这避免了在最后添加的行之后添加不必要的换行符。

答案 3 :(得分:1)

我在您的代码中发现了一个错误,该错误解释了为什么输出在一行中。

命令System.out.println(N)应该在for循环内。 变量N是不必要的-请忽略它。

代码中还有另一个资源泄漏问题,因为从未关闭过扫描器。应该使用自动关闭机制(通过对资源语句使用try)关闭扫描器。

我提出以下代码来解决该问题:

public static void main(String[] args) throws FileNotFoundException {
    File inFile = new File("input.txt");
    try (Scanner sc = new Scanner(inFile)){
        int tc = sc.nextInt();
        for (int i=0; i < tc; i++) {
            System.out.println(sc.next());
        }
    }
}