java - 如何在 Java 中输入超过 4095 个字符的行?
问题描述
无论我输入的行有多长,我都不知道为什么 l String 的长度不超过 4095。我真的不知道错误在哪里。我认为这是一个终端规则或其他东西,但我怎样才能在 Java 中绕过它?如您所见,我使用了 BufferedReader 和它的 readLine() 方法,我需要读取大比例的行。已经没有选择了。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Krazki {
public static int solve() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String l = br.readLine();
int n = Integer.parseInt(l.split("\\s")[0]);
int m = Integer.parseInt(l.split("\\s")[1]);
if(n < m) {
return 0;
}
int[] width = new int[n + 2];
width[0] = Integer.MAX_VALUE;
l = br.readLine();
String[] line = l.split("\\s", n);
for(int i = 1; i <= n;i++){
width[i] = Math.min(width[i-1], Integer.parseInt(line[i-1]));
}
width[n + 1] = 0;
int res = n + 1;
line = br.readLine().split("\\s");
for(int i = 0; i < m; i++){
if(res > 0) {
res--;
}
while(width[res] < Integer.parseInt(line[i])) {
res--;
}
}
br.close();
return res;
}
catch(Exception e) {
e.printStackTrace();
return -1;
}
}
public static void main(String[] args) {
System.out.println(solve());
}
}
解决方案
您可以在 Java 中输入的行的长度(实际上1)没有限制。
如果您看到 4096 个字符的行长度限制,则可能是您用于输入数据的命令 shell 或控制台应用程序强加的。这不是一个可以在 Java 应用程序中直接解决的问题。
行长度限制通常是特定于操作系统的,并且需要通过特定于操作系统的方式来解决。
但是,更实用的方法是将您的应用程序更改为:
- 从不应有任何行长限制的文件中获取输入,或
- 实现一个续行语法,允许用户将过长的行输入为多行。
1 - 应用程序可能无法处理超过 ~2 31个字符的行,因为使用数组String
和StringBuffer
数组仅限于这么多元素。此外,应用程序通常需要足够的内存来保存完整的行。
推荐阅读
- asp.net-core - 如何使用 MediatR 根据查询结果执行查询和命令?
- html - 单元格之间的html表格空间,但不是来自左右表格边框
- php - Laravel - 无法使用 sendmail 驱动程序发送电子邮件
- python - 无法使用 cv2.VideoCapture(video_path).set(cv2.CAP_PROP_FPS, new_frame_rate) 更改输入视频的帧速率
- jakarta-ee - 无法使用 JNDI 查找将消息放在 ActiveMQ 上
- python - How to query columns with [] inside the names?
- python - Visual Studio Code (Python) - 'NoneType' object has no attribute 'write'
- ruby - 使用修改后的 Makefile 安装 Nokogiri
- javascript - 如果我在悬停时进行了变换,如何应用 CSS 变换?
- url - 在 prod build 中 Create-React-App 到 JS 和 CSS 的绝对路径