首页 > 解决方案 > 如何在 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());
    }
}

标签: javastringbufferedreader

解决方案


您可以在 Java 中输入的行的长度(实际上1)没有限制。

如果您看到 4096 个字符的行长度限制,则可能是您用于输入数据的命令 shell 或控制台应用程序强加的。这不是一个可以在 Java 应用程序中直接解决的问题。

行长度限制通常是特定于操作系统的,并且需要通过特定于操作系统的方式来解决。

但是,更实用的方法是将您的应用程序更改为:

  • 从不应有任何行长限制的文件中获取输入,或
  • 实现一个续行语法,允许用户将过长的行输入为多行。

1 - 应用程序可能无法处理超过 ~2 31个字符的行,因为使用数组StringStringBuffer数组仅限于这么多元素。此外,应用程序通常需要足够的内存来保存完整的行。


推荐阅读