JShell 会截断一些打印在 REPL 中的字符串结果。但是,它不会影响打印到控制台。
我们可以看到同样的事情发生在运行这个:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
List<Integer> x = IntStream.range(0,3000).mapToObj(Integer::valueOf).collect(Collectors.toList());
x
我们将在该输出中看到与省略号相同的截断。
如果我们打印结果:
System.out.println(x);
我们没有看到这一点。
这是用户可配置的。例如,我们可以创建一个自定义格式模式,最多允许 40,000 个字符(我们可能不会遇到一个过高的数字,因此不会发生截断)。
/set mode mine normal -command
/set truncation mine 40000
/set feedback mine
这将创建一个名为mine的新反馈模式,它继承自内置模式normal †(显然有很多选项,所以我们从另一个模式继承,这样我们就不必担心设置所有内容)。详情请参阅/help /set mode
。
第二个命令将截断设置为 40000 个字符。可以对其进行配置,以便截断取决于显示的内容类型。详情请参阅/help /set truncation
。
最后,这里的最后一条命令切换到这种反馈模式。现在,控制台中显示的任何内容都将不再被截断,除非它超过 40,000 个字符。
此链接以及官方文档和上面的帮助命令有助于弄清楚这一点,以便编写此答案。
†正常模式在截断前最多显示 1,000 个字符。单独使用/set truncation
来显示各种截断设置或/set truncation normal
显示正常模式的设置。