diff --git a/CHANGES.md b/CHANGES.md
index b61b84ab1e..b66ef69a0f 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -14,12 +14,14 @@ Grammars:
- fix(cpp) fix `xor_eq` keyword highlighting. [Denis Kovalchuk][]
- enh(c,cpp) highlight type modifiers as type (#3316) [Josh Goebel][]
- enh(css/less/stylus/scss) add support for CSS Grid properties [monochromer][]
+- enh(java) add support for Java Text Block (#3322) [Teletha][]
- enh(scala) add missing `do` and `then` keyword (#3323) [Nicolas Stucki][]
[Austin Schick]: https://github.com/austin-schick
[Josh Goebel]: https://github.com/joshgoebel
[Denis Kovalchuk]: https://github.com/deniskovalchuk
[monochromer]: https://github.com/monochromer
+[Teletha]: https://github.com/teletha
[Nicolas Stucki]: https://github.com/nicolasstucki
diff --git a/src/languages/java.js b/src/languages/java.js
index 5acf81fc7d..d2a8482c1d 100644
--- a/src/languages/java.js
+++ b/src/languages/java.js
@@ -160,6 +160,12 @@ export default function(hljs) {
},
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
+ {
+ begin: /"""/,
+ end: /"""/,
+ className: "string",
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE,
{
diff --git a/test/markup/java/textblock.expect.txt b/test/markup/java/textblock.expect.txt
new file mode 100644
index 0000000000..02b3f0f06b
--- /dev/null
+++ b/test/markup/java/textblock.expect.txt
@@ -0,0 +1,5 @@
+String json = """
+ {
+ "key": "value"
+ }
+ """;
diff --git a/test/markup/java/textblock.txt b/test/markup/java/textblock.txt
new file mode 100644
index 0000000000..2f9d28a25d
--- /dev/null
+++ b/test/markup/java/textblock.txt
@@ -0,0 +1,5 @@
+String json = """
+ {
+ "key": "value"
+ }
+ """;