1

在我的大学项目的一部分中,我必须获取带有一些行的文本,然后将其保存在字符串或字符串数​​组中。我的问题是在扫描仪类中使用方法只能获得一行输入。所以我无法获得其他线路。请帮助我。

public class Main {
public static void main(String[] args) {
    java.util.Scanner a = new java.util.Scanner(System.in);
    String b = "";
    while (a.hasNextLine()) {
        b += a.nextLine();
    }
}

}

4

2 回答 2

2

您可以尝试使用isEmpty来检测仅输入的输入。

更新

如果您的输入还包含一个空行,那么您可以指定另一个终止符;而不仅仅是一个空字符串。

public class Main {
    public static void main(String[] args) {
        //for example ",,"; then the scanner will stop when you input ",,"
        String TERMINATOR_STRING = ",,"

        java.util.Scanner a = new java.util.Scanner(System.in);
        StringBuilder b = new StringBuilder();
        String strLine;
        while (!(strLine = a.nextLine()).equals(TERMINATOR_STRING)) {
            b.append(strLine);
        }
    }
}
于 2014-11-21T06:09:15.743 回答
1

如果您是从命令行构建程序,那么您可以使用一种称为“输入重定向”的东西。以下是它的工作原理:

假设您的程序是:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ScanningMultiline
{
    public static void main (String[] args)
    {
        List<String> lines = new ArrayList<> ();

        try (Scanner scanner = new Scanner (System.in))
        {
            while (scanner.hasNextLine ())
            {
                lines.add (scanner.nextLine ());
            }
        }

        System.out.println ("Total lines: " + lines.size ());
    }
}

现在假设您已经在一个文件中为您的程序准备了输入。

要编译程序,您需要将终端/命令提示符的当前目录更改为程序目录,然后编写:
javac ScanningMultiline.java

然后运行,使用输入重定向,如:
java ScanningMultiline < InputFile.txt

如果您InputFile.txt在另一个目录中,只需将其完整路径改为:
java ScanningMultiline < "/Users/Xyz/Desktop/InputFile.txt"

另一种方法

您可以尝试直接从文件中读取输入。以下是该程序的编写方式:

import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ScanningMultiline
{
    public static void main (String[] args)
    {
        final String inputFile = "/Users/Xyz/Desktop/InputFile.txt";

        List<String> lines = new ArrayList<> ();

        try (Scanner scanner = new Scanner (Paths.get (inputFile)))
        {
            while (scanner.hasNextLine ())
            {
                lines.add (scanner.nextLine ());
            }
        }
        catch (IOException e)
        {
            e.printStackTrace ();
        }

        System.out.println ("Total lines: " + lines.size ());
    }
}

这种方法直接从文件中读取,并将文件中的行放入字符串列表中。

另一种方法

您可以从文件中读取行并将它们存储在单行的列表中,如以下代码段所示:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ScanningMultiline
{
    public static void main (String[] args) throws IOException
    {
        final String inputFile = "/Users/Xyz/Desktop/InputFile.txt";

        List<String> lines = Files.readAllLines (Paths.get (inputFile));
    }
}

Yohanes Khosiawan 已经回答了一种不同的方法,所以我不在这里写那个。

于 2014-11-21T07:27:50.413 回答