Java读取一个带有多个换行符的文本输入

时间:2014-07-29 23:19:51

标签: java

我正在寻找一种方法来读取复制并粘贴到IDE或终端/ cmd中的行,这样即使遇到换行符,BufferedReader也会读取所有文本(&# 39; \ n)的。棘手的部分是读者必须知道用户按下了enter(这是换行符),但它必须继续读取输入字符串中的所有字符,直到它到达最后'\n'

有没有办法做到这一点(例如使用InputStreamReader或其他东西)?

解答:

public static void main(String[] args) {
    InputStreamReader reader = new InputStreamReader(System.in);
    StringBuilder sb = new StringBuilder();

    int ch;

    System.out.println("Paste text below (enter or append to text \"ALT + 1\" to exit):");

    try {
        while ((ch = reader.read()) != (char)63 /*(char)63 could just be ☺*/) {
            sb.append(ch);
        }
        reader.close();
    }catch (IOException e) {
        System.err.println(e.toString());
    }
    String in = sb.toString();
    System.out.println(in);
}

2 个答案:

答案 0 :(得分:0)

好吧,我没有在Stack Overflow上看到这个,所以我想我会问,而且我不知道InputStreamReader是否会起作用......但我猜它确实如此。因此,如果您想阅读包含大量换行符的文本,则必须使用InputStreamReader

这是一个类实现Reader(实现readablecloseable并且有一个方法(read(chBuf)),允许您读取缓冲区字符的输入流(数组),chBuf。我用来测试它的代码如下:

public static void main(String[] args) {
    String in = "";

    InputStreamReader reader = new InputStreamReader(System.in);

    System.out.println("paste text with multiple newline characters below:");

    try {
        char chs[] = new char[1000];
        int n;
        while (reader.read(chs) != -1) {
            for (int i = 0; i < chs.length; i++) {
                char ch = chs[i];
                if (ch == '\u0000') {
                    break;
                } 
                in += chs[i];
            }
            System.out.println(in);
        }
        System.out.print(".");
    } catch (IOException e) {
        System.err.println(e.toString());
    }

    System.out.println(in);
}

这有点......它将输入的文本打印一次半。

答案 1 :(得分:0)

我可以看到你付出了努力,所以我会告诉你我的意思。当您需要从流中读取时,这是一种非常常见的模式:

char[] buffer = new char[1000];
StringBuilder sb = new StringBuilder();
int count;
// note this loop condition
while((count = reader.read(buffer)) != -1) {
    sb.append(buffer, 0, count);
}
String input = sb.toString();