Java如何获取多行字符串输入并判断输入结束

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<List> list = new ArrayList<List>();
List list1 = new ArrayList();
String s = null;
while (!(s = sc.nextLine()).equals("")) {
String[] str = s.split(",");
for (int i = 0; i < str.length; i++) {
list1.add(Integer.parseInt(str[i]));
}
list.add(list1);
}
System.out.println(list);
}

整理自网络

为何不用Scanner 的hasNextLine方法判断结束?

根据输入来源的不同 ,Scanner 的hasNextLine方法会产生不同效果,若Scanner的输入来源来自文件你这样写是没有任何问题的,
但是你的输入来自控制台(System.in) 这时当程序执行到sc.hasNextLine()方法时发现是空白(因为你什么都还没有输入),这时hasNextLine方法
就会阻塞线程直到你在键盘上输入后才会继续执行,但问题是一旦输入任何字符后程序就会认为你已经输入了,既然有了输入那么hasNextLine
方法必然会返回true,你这个循环就成了死循环了,所有永远也跳不出来!

那么如何让程序认为你是要结束输入,而不是把你的任何输入当作正常的输入来对待呢,答案是 ctrl+z !输入ctrl+z 后就可以表达出你是要结束输入!这个就是一个结束的标志 相当于EOF

机考的时候,我需要读取多行字符串,而程序的输入是系统自己自动输入,我无法手动多添加一个空格或任何一个我定义的结束符。

现在想想,对于之前说的用ctrl+z我也是没有办法自己输入的,也就是说我只能写好程序,直接运行,系统会自动输入指定样式数据,所以我得知道我该怎么接收这种格式的输入,怎么结束输入。

这个问题,怎么解决啊?

hasNext()
判断扫描器中当前扫描位置后是否还存在下一段。
hasNextLine()
如果在此扫描器的输入中存在另一行,则返回 true。
next()
查找并返回来自此扫描器的下一个完整标记。
nextLine()
此扫描器执行当前行,并返回跳过的输入信息。
nextInt()
将控制台扫描的整形数据返回。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用`fgets()`函数来输入多行字符串,其以回车符作为结束标志。下面是一个简单的示例代码: ```c #include <stdio.h> int main() { char str[100]; // 假设每行字符串不超过100个字符 while (fgets(str, sizeof(str), stdin) != NULL) { // 处理输入的每一行字符串 } return 0; } ``` 在上述代码,`fgets()`函数每次读取一行字符串,直到读取到回车符为止。`stdin`表示从标准输入读取数据。如果读取成功,则返回读取的字符串,否则返回`NULL`。可以在循环处理每一行读取到的字符串。 ### 回答2: 在C语言,我们可以使用字符数组来输入多行字符串,并且以回车符结束输入。 首先,我们需要定义一个足够大的字符数组来存储输入多行字符串。假设我们定义的数组为`str`,大小为1000。然后,我们使用`fgets()`函数来从标准输入读取字符串,直到遇到回车符为止。 下面是一个示例代码: ```c #include <stdio.h> #define MAX_SIZE 1000 int main() { char str[MAX_SIZE]; printf("请输入多行字符串(以回车符结束):\n"); // 循环读取多行字符串,直到遇到回车符为止 while (fgets(str, sizeof(str), stdin) != NULL) { // 判断是否遇到回车符 if (str[0] == '\n') { break; } // 打印读取的字符串 printf("输入的字符串:%s", str); } return 0; } ``` 在上述示例,我们使用`fgets()`函数从标准输入读取字符串,并将其存储在字符数组`str`。然后,我们通过判断读取的字符串是否为只包含回车符的字符串来判断是否遇到了回车符。如果遇到回车符,则跳出循环,输入结束。 希望能对你有所帮助! ### 回答3: C语言输入多行字符串并以回车符结束可以通过循环读取字符实现。 1. 首先,可以定义一个字符数组来存储输入多行字符串,如`char str[1000]`。 2. 然后,可以使用循环来逐行读取字符串。在循环里面,可以使用`fgets()`函数来读取一行字符串,并将其存储到`str`数组。示例代码如下: ```c #include <stdio.h> int main() { char str[1000]; char line[1000]; while (1) { fgets(line, sizeof(line), stdin); // 如果输入的是回车符,则结束循环 if (line[0] == '\n') { break; } // 将输入的一行字符串拼接到str数组 strcat(str, line); } printf("输入多行字符串为:%s\n", str); return 0; } ``` 以上代码使用了`fgets()`函数来读取用户输入的一行字符串,当输入的是回车符时,就会跳出循环。在循环内部,使用`strcat()`函数来将输入的每一行字符串拼接到`str`数组。 最后,打印输出拼接完成的多行字符串。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值