Java中while (true) { String input = in.readLine(); if (input == null) { return; }改成多行读取
时间: 2024-02-21 10:02:28 浏览: 95
可以使用 `while` 循环和 `in.ready()` 方法来实现多行读取,具体代码如下:
```java
while (true) {
StringBuilder sb = new StringBuilder();
while (in.ready()) {
String input = in.readLine();
if (input == null) {
return;
}
sb.append(input);
sb.append(System.lineSeparator());
}
String input = sb.toString().trim();
// 处理输入
}
```
上述代码中,首先定义了一个 `StringBuilder` 对象 `sb`,用来存储多行输入的内容。然后进入 `while` 循环,使用 `in.ready()` 方法检查输入流是否有数据可读,如果有数据可读,则使用 `in.readLine()` 方法读取一行数据,并将其添加到 `sb` 对象中。如果读取到的数据为 `null`,则表示输入流已经结束,可以退出循环。最后,使用 `sb.toString().trim()` 方法获取完整的输入内容,并去除开头和结尾的空格和换行符。最后一步是为了确保输入内容的正确性。最后,你可以在注释的地方添加你的输入处理代码。
相关问题
while (true) { String input = in.readLine(); if (input == null) { return; }改成多行读取
可以使用 `while` 循环和 `in.ready()` 方法来实现多行读取,具体代码如下:
```java
while (true) {
if (in.ready()) {
String input = in.readLine();
if (input == null) {
return;
}
// 处理输入
} else {
// 等待输入
Thread.sleep(100);
}
}
```
上述代码中,`in.ready()` 方法用来检查输入流是否有数据可读。如果有数据可读,则使用 `in.readLine()` 方法读取一行数据。如果读取到的数据为 `null`,则表示输入流已经结束,可以退出循环。如果没有数据可读,则等待一段时间后再次检查。这里使用 `Thread.sleep(100)` 方法等待 100 毫秒,减少 CPU 的占用率,提高性能。
用java编写程序,统计给定的C源程序中花括号的最大嵌套层次,并输出花括号嵌套序列,该程序没有语法错误。 注意: 1) 源程序注释(/* ... */)中的花括号应被忽略,不参与统计。 2) 源程序中的字符串常量不会出现花括号。 【输入形式】 要检查的C源程序文件名为input.c,在当前目录下。 【输出形式】 向控制台输出花括号的最大嵌套层次数,并在新的一行上按出现的先后顺序输出花括号。 【样例输入】 假如当前目录下input.c文件的内容为: #include <stdio.h> main() { int a,b,i,sum1,sum2; /*{input}*/ scanf("%d%d",&a,&b); sum1=sum2=0; for(i=a;i<=b;i++) { if(i%2==0) { sum1+=i; } else { sum2+=i; } } /*{output}*/ printf("Sum1=%d, Sum2=%d",sum1,sum2); } 【样例输出】 3 {{{}{}}} 【样例说明】 源程序input.c中的花括号的最大嵌套层次为3,所以输出3。然后顺序输出出现的花括号(注释中的花括号应被忽略),即:{{{}{}}}。
这是一个编程问题,需要用到Java编写程序来实现,我可以给你提供一份可能的实现思路:
1. 读取指定的C源程序文件,将其转换为字符串。
2. 定义一个计数器变量,表示当前花括号的嵌套层数,初始值为0。
3. 遍历C源程序字符串的每个字符,如果当前字符是 { ,则计数器加1,如果是 } ,则计数器减1。
4. 在遍历过程中,记录花括号出现的先后顺序。
5. 在遍历结束后,输出最大嵌套层数和花括号出现的先后顺序。
以下是可能的Java实现代码:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class BraceParser {
public static void main(String[] args) {
try {
String source = readSource("input.c"); // 读取指定的C源程序文件
List<Integer> braces = new ArrayList<>(); // 记录花括号出现的先后顺序
int depth = 0; // 当前花括号的嵌套层数
int maxDepth = 0; // 最大嵌套层数
boolean inComment = false; // 是否在注释中
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
if (c == '/' && i + 1 < source.length() && source.charAt(i + 1) == '*') {
inComment = true; // 进入注释
} else if (c == '*' && i + 1 < source.length() && source.charAt(i + 1) == '/') {
inComment = false; // 退出注释
} else if (!inComment) { // 如果不在注释中
if (c == '{') {
depth++;
maxDepth = Math.max(maxDepth, depth);
braces.add(1);
} else if (c == '}') {
depth--;
braces.add(-1);
}
}
}
System.out.println(maxDepth); // 输出最大嵌套层数
for (int b : braces) {
System.out.print(b > 0 ? "{" : "}"); // 按先后顺序输出花括号
}
System.out.println();
} catch (IOException e) {
e.printStackTrace();
}
}
private static String readSource(String fileName) throws IOException {
StringBuilder sb = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
}
return sb.toString();
}
}
```
你可以把上面的代码保存为BraceParser.java文件,然后在命令行中运行:
```
javac BraceParser.java
java BraceParser
```
程序会输出最大嵌套层数和花括号出现的先后顺序。注意,上面的代码只是一个可能的实现思路,实际上还有很多细节需要考虑,比如字符串常量中可能含有大括号,注释中可能有换行符等等,你需要根据实际情况进行修改和完善。
阅读全文