如何从用户读取字符串直到遇到换行符(Java)?

问题描述 投票:2回答:3

所以问题是我想要读取字符串的多行并将它们放入ArrayList中,只要用户不输入任何内容就不会转到下一行。

以下是示例输入的样子:

hello 
I am John

这是我试过的代码,但它没有用。 (错误是:“字符串索引超出范围:0”。)

Scanner input = new Scanner(System.in);
ArrayList<String> text = new ArrayList<>();
while (true) {
    String temp = input.nextLine();
    if (temp.charAt(0) == '\n') {
        break;
    }
    text.add(temp);
}
java string newline
3个回答
3
投票

您可以尝试使用if (temp.isEmpty()),因为Scanner会读取一个空字符串。

Scanner input = new Scanner(System.in);
List<String> text = new ArrayList<>();
while (true) {
    String temp = input.nextLine();
    if (temp.isEmpty()) break;
    text.add(temp);
}

1
投票

nextLine()删除了行终止符。见Javadoc。

你应该测试该行为空。


1
投票

你可以使用https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

并且方法readLine而不是Scanner。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException {
        List<String> text = new ArrayList<>();
        System.out.println("Start input lines, press enter to stop: ");
        try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
          String line;
          for(;;) {
              line = reader.readLine();
              if(null == line || line.length() == 0) 
                  break;
              text.add(line);             
          } 
        }
        System.out.println("Echo: ");
        text.stream().forEach((String str)-> {
            System.out.println(str);
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.