Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误与异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java APIs 与框架

Java 类引用

Java 有用资源

Java - 文本块



Java 在 Java 15 中引入了 **文本块** 作为标准特性,用于处理多行 字符串,例如 JSON/XML/HTML 等。它在 Java 13 中作为预览特性引入。

引入文本块的主要目的是更有效地声明多行字符串。在文本块之前,我们可以使用字符串连接、字符串生成器追加方法、字符串连接方法来声明多行字符串,但这种方法相当混乱。因为我们必须使用行终止符、分隔符等来标记新行。文本块提供了一种更好、更替代的方法来使用 """,三个双引号标记来定义多行字符串。

文本块语法

**文本块**是对现有 String 对象的增强,具有特殊的语法,其中字符串内容应以 """ 开头,并以换行符结尾,并以 """ 结尾。""" 内的任何内容都将按原样使用。

String textBlockJSON = """
   {
      "name" : "Mahesh",
      "RollNO" : "32"
   }
   """;

等效字符串可以使用如下所示的旧语法编写

String stringJSON = "{\r\n" 
         + "   \"Name\" : \"Mahesh\",\r\n" 
         + "   \"RollNO\" : \"32\"\r\n" 
         + "}";  

Java 文本块示例

在这个例子中,我们使用文本块和字符串连接打印了 json 字符串。

package com.tutorialspoint;

public class Tester {

   public static void main(String[] args) {
      String stringJSON = "{\r\n" 
      + "   \"Name\" : \"Mahesh\",\r\n" 
      + "   \"RollNO\" : \"32\"\r\n" 
      + "}";  

      System.out.println(stringJSON);

      String textBlockJSON = """
      {
         "name" : "Mahesh",
         "RollNO" : "32"
      }
      """;
      System.out.println(textBlockJSON);
   }   
}

输出

让我们编译并运行上面的程序,这将产生以下结果:

{
   "Name" : "Mahesh",
   "RollNO" : "32"
}
{
   "name" : "Mahesh",
   "RollNO" : "32"
}

文本块字符串操作

文本块与 String 相同,可以使用 equals() 方法 或相等运算符进行比较。

// compare the content, 
textBlockJSON.equals(stringJSON);
	      
// compare the objects
textBlockJSON == stringJSON;

文本块支持所有字符串操作,如 indexOf()、contains() 等。

// check if text block contains a provided string or not
textBlockJSON.contains("Mahesh");

// get the length of string content
textBlockJSON.length()

示例:Java 中的文本块字符串操作

在这个例子中,我们执行了各种字符串操作,并将文本块与等效字符串进行了比较。

package com.tutorialspoint;

public class Tester {

   public static void main(String[] args) {
      String stringJSON = "Mahesh";

      String textBlockJSON = """
      Mahesh""";
      // compare the content
      System.out.println(textBlockJSON.equals(stringJSON));

      // compare the objects
      System.out.println(textBlockJSON == stringJSON);

      // text block supports all string operations
      System.out.println("Contains: " + textBlockJSON.contains("Mahesh"));
      System.out.println("indexOf: " + textBlockJSON.indexOf("Mahesh"));
      System.out.println("Length: " + textBlockJSON.length());
   }   
}

输出

让我们编译并运行上面的程序,这将产生以下结果:

true
true
Contains: true
indexOf: 0
Length: 6

文本块方法

  • **stripIndent()** - 从字符串的开头和结尾删除不必要的空格。

  • **translateEscapes()** - 根据字符串语法转换转义序列。

  • **formatted()** - 类似于 String format() 方法,支持在文本块字符串中进行格式化。

示例

考虑以下示例:

ApiTester.java

public class APITester {

   public static void main(String[] args) {
	  String textBlockJSON = """
         {
            "name" : "%s",
            "RollNO" : "%s"
         }
         """.formatted("Mahesh", "32");
      System.out.println(textBlockJSON);
   }   
}

输出

{
   "name" : "Mahesh",
   "RollNO" : "32"
}
广告
© . All rights reserved.