【问题标题】:Java carriage return \r doesn't seem to work correctlyJava 回车 \r 似乎无法正常工作
【发布时间】:2022-01-10 22:46:08
【问题描述】:

这是我的 java 代码:

// file name is Strings.java
public class Main {
    public static void main(String[] args){
        String txt = "Hello\rWorld!";
        System.out.println(txt);

        String txt2 = "Trying\rthis";
        System.out.println(txt2);
    } 
}

我试图从我的终端执行它,并看到了这个:

$ java Strings.java 
World!
thisng

我也尝试从 Visual Studio Code 执行此操作,结果相同。所以输出与this tutorial 中写的不同。有人可以告诉我为什么吗?谢谢!

【问题讨论】:

  • 你认为应该怎么做?是什么让你这么认为?
  • @Elliott Frisch 其实你错了,因为java 10左右,你可以用命令java X.java编译运行单个源文件
  • openjdk.java.net/jeps/330 这是 Java 11,对不起
  • @user16320675 刚刚测试过。确实java Strings.java works 尽管Strings.java 持有代码为public class Main{...}javac 不允许,因为公共顶级类应该在具有相同的文件中name 作为类名,这意味着它需要Main.java)。今天学到了新东西。谢谢。
  • @Pshemo JLS 7.6. Top Level Class and Interface Declarations: " 当且仅当包存储在文件系统中时(第 7.2 节),主机系统可以选择强制执行它是编译时的限制如果在由类或接口名称加上扩展名(例如 .java 或 .jav)组成的名称下的文件中找不到类或接口,则错误,如果以下任一为真: .... - 类或接口被声明为 public ..."

标签: java carriage-return


【解决方案1】:

这取决于操作系统:Linux (\n)、Mac (\r)、Windows (\r\n)。都有不同的new line 符号。见Adding a Newline Character to a String in Java

要获得实际组合,请使用:

System.lineSeparator()

根据你的例子:

System.out.println("Hello" + System.lineSeparator() + "World!");
System.out.println("Trying" + System.lineSeparator() + "this");

输出:

$ java Strings.java 
Hello
World!
Trying
World!
this

这有点难看,但是一个通用的解决方案。

P.S. 作为替代方案,您可以改用System.out.format()

System.out.format("Hello%nWorld!%n");
System.out.format("Trying%nthis%n");

P.P.S.我认为一般来说最好建立一个行列表并使用System.out.println()

Arrays.asList("Hello", "World!").forEach(System.out::println);
Arrays.asList("Trying", "this!").forEach(System.out::println);

【讨论】:

    【解决方案2】:

    您也可以将format%n 一起使用,后者由平台行分隔符替换,因此可以这样使用:

    System.out.format("Hello%nWorld!%n");
    

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 2017-09-04
      • 2012-05-06
      • 2013-02-17
      • 2017-10-09
      • 2017-08-03
      • 2014-05-02
      • 2011-09-11
      • 2016-02-11
      相关资源
      最近更新 更多