相关文章推荐
安静的冰棍  ·  查询树状结构的某个节点的所有子节点及孙节点_ ...·  12 月前    · 
飘逸的感冒药  ·  Spark读取文本文件并转换为DataFra ...·  1 年前    · 
苦恼的打火机  ·  CSS – Sass & SCSS - ...·  1 年前    · 
酷酷的黄花菜  ·  springboot ...·  1 年前    · 
小胡子的薯片  ·  Vue 爬坑之路(七)—— 监听滚动事件 ...·  2 年前    · 
Code  ›  Java 多行字符串开发者社区
string printwriter
https://cloud.tencent.com/developer/article/2068441
大鼻子的单车
2 年前
作者头像
HoneyMoose
0 篇文章

Java 多行字符串

原创
前往专栏
腾讯云
备案 控制台
开发者社区
学习
实践
活动
专区
工具
TVP
文章/答案/技术大牛
写文章
社区首页 > 专栏 > CWIKIUS > 正文

Java 多行字符串

原创
发布 于 2022-08-08 21:48:34
1.7K 0
举报

在本文中,我们来说说 Java 的多行字符串(multiline strings )。

从 JDK 15 开始,Java 提供了一个称为 Text Blocks 的语法,你可以在代码中直接使用这个功能,如果你安装这个版本的 JDK 的话,那么需要使用一些特定方法实现这个目标。

在本文中,我们还讨论使用其他方法的实现。

文本块

我们可以使用文本块来在代码中定义,文本块使用的是 3 个双引号 “”" (three double quote 3 个双引号) :

public String textBlocks() {
    return """
        Get busy living
        get busy dying.
        --Stephen King""";
}

这种定义方式在当前 Java 中最方便的实现了,但是因为 JDK 版本的限制,很多项目可能根本没有办法使用这种定义方式。

如果你还没有使用 Java 15,但是使用了 Java 13 和 14 版本的话,我们可以启用预览功能来进行支持。 在后面的文章中,我们将探讨下肯能有的其他实现方式来实现文本块的功能。

获得行分隔符

每个操作系统使用自己的方式来确定是否开始一个新行。

在 Java 中,能够非常容易的获得针对运行的操作系统使用的是什么行分隔符,使用下面的代码就可以获得行分隔符了。

String newLine = System.getProperty("line.separator");

如果你的 JDK 版本是在 7 以上的版本的话,你可以直接使用系统提供的:

System.out.println(System.lineSeparator());

方法。

我们将会使用 newLine 变量在后续的代码中插入一个新行。

String 字符串拼接

String concat 方法能够让我们非常容易的对字符串进行拼接,请考察下面的代码:

public String stringConcatenation() {
    return "Get busy living"
            .concat(newLine)
            .concat("or")
            .concat(newLine)
            .concat("get busy dying.")
            .concat(newLine)
            .concat("--Stephen King");
}

使用 + 操作符,是能够实现上面字符串拼接的另外一种方法。

Java 编译器将会把 concat() 和 + 操作符编译成相同的代码:

public String stringConcatenation() {
    return "Get busy living"
            + newLine
            + "or"
            + newLine
            + "get busy dying."
            + newLine
            + "--Stephen King";
}

字符串 String Join

Java 8 使用了一个叫做 String#join 新方法,这个方法将会使用一系列的字符串作为参数。

这个方法将会返回使用分隔符分隔的所有以字符串为参数的字符串。

public String stringJoin() {
    return String.join(newLine,
                       "Get busy living",
                       "or",
                       "get busy dying.",
                       "--Stephen King");
}

String Builder

StringBuilder 通常被用来帮助构建字符串,相同的还有一个 StringBuffer ,这 2 者的区别主要在于是否是线程安全的问题。请参考: Java 的 StringBuffer 和 StringBuilder 的不同 文章中的内容。

最简单的解释就是 StringBuilder 是线程不安全的。

在基本 Java 实践中,如果我们需要在程序中构建字符串,通常都会使用 StringBuilder 或者 StringBuffer,而尽量避免使用 Java String 的 + 操作符:

public String stringBuilder() {
    return new StringBuilder()
            .append("Get busy living")
            .append(newLine)
            .append("or")
            .append(newLine)
            .append("get busy dying.")
            .append(newLine)
            .append("--Stephen King")
            .toString();
}

String Writer

StringWriter 是另外一种可以用来创建多行字符串的方法。

在这个方法中,我们不需要使用 newLine ,因为我们使用了 PrintWriter 对象,这个对象将会自动添加一个方法 println(); (如果你查看下 JDK 的源代码的话就了解了。)

public String stringWriter() {
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    printWriter.println("Get busy living");
    printWriter.println("or");
    printWriter.println("get busy dying.");
    printWriter.println("--Stephen King");
    return stringWriter.toString();
}

Guava Joiner

使用外部库,通常对字符串拼接这个问题来说意义不大。

如果你的项目已经使用了外部库的话,你也是可以直接拿来用的。

例如,大部分项目中都会使用的 Guava。我们可以使用 Guava 中的 Joiner 类。

public String guavaJoiner() {
    return Joiner.on(newLine).join(ImmutableList.of("Get busy living",
 
推荐文章
安静的冰棍  ·  查询树状结构的某个节点的所有子节点及孙节点_给定一棵树和某个节点,寻找该节点的非子孙节点-CSDN博客
12 月前
飘逸的感冒药  ·  Spark读取文本文件并转换为DataFrame - 干了这瓶老干妈 - 博客园
1 年前
苦恼的打火机  ·  CSS – Sass & SCSS - 兴杰 - 博客园
1 年前
酷酷的黄花菜  ·  springboot elasticsearch 集成注意事项 - mrguozp - 博客园
1 年前
小胡子的薯片  ·  Vue 爬坑之路(七)—— 监听滚动事件 实现动态锚点 - Wise.Wrong - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号