gpt4 book ai didi

perl - 用\n 替换尾部反斜杠\n 的最清晰方法是什么?

转载 作者:行者123 更新时间:2023-12-05 00:50:53 24 4
gpt4 key购买 nike

我想要 java 中的多行字符串,所以我寻求一个简单的预处理器来将 C 风格的多行转换为带有文字 '\n' 的单行。

之前:

    System.out.println("convert trailing backslashes\
this is on another line\
\
\
above are two blank lines\
But don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");

之后:

     System.out.println("convert trailing backslashes\nthis is on another line\n\n\nabove are two blank lines\nBut don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");

我认为 sed 会做得很好,但是 sed 是基于行的,所以替换 '\' 和它后面的换行符(有效地连接两行)在 sed 中不是很自然.我改编了sredden79's oneliner到以下 - 它有效,它很聪明,但不清楚:

sed ':a { $!N; s/\\\n/\\n/; ta }'

替代品是 escaped literal backslashnewlineescaped literal backslashn:a 是标签,ta 是 goto 标签,如果替换找到匹配项; $ 表示最后一行,而 $! 则相反(即除最后一行以外的所有行)。 N 表示将下一行附加到模式空间(从而使 \n 字符可见。)

编辑这里有一个保持编译器错误行号等准确的变体:它将每个扩展行转换为 "..."+\n (并正确处理字符串的第一行和最后一行) :

sed ':a { $!N; s/\\\n/\\n"+\n"/; ta }'

给予:

    System.out.println("convert trailing backslashes\n"+
"this is on another line\n"+
"\n"+
"\n"+
"above are two blank lines\n"+
"But don't convert non-trailing backslashes, like: \"\t\" and \'\\\'");

编辑 实际上,Perl/Python 风格的多行会更好,它在一行中以特殊代码开始和结束(我认为是 python 的“"”)。

有没有更简单、更明智、更清晰的方法(也许不使用 sed)?

最佳答案

Is there a simpler, saner, clearer way.

忘记预处理器,接受限制,提示它(这样它可能会在 Java 7 或 8 中得到修复),并且 use an IDE to ease the pain .

其他选择(我想太麻烦了,但总比搞乱编译过程好):

  • 使用支持 here-docs 的基于 JVM 的语言
  • 将字符串外化到资源文件中

关于perl - 用\n 替换尾部反斜杠\n 的最清晰方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2227116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com