{"id":93559,"date":"2025-12-30T22:55:59","date_gmt":"2025-12-30T15:55:59","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=93559"},"modified":"2025-12-31T09:51:34","modified_gmt":"2025-12-31T02:51:34","slug":"huong-dan-java-string-format","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/","title":{"rendered":"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Java_String_Format_la_gi\" >Java String Format l\u00e0 g\u00ec?&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Phuong_phap_co_dien_va_pho_bien_Stringformat\" >Ph\u01b0\u01a1ng ph\u00e1p c\u1ed5 \u0111i\u1ec3n v\u00e0 ph\u1ed5 bi\u1ebfn: $`String.format()`$<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Cac_chi_dinh_dinh_dang_co_ban\" >C\u00e1c ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng c\u01a1 b\u1ea3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Dinh_dang_cho_IO_Systemoutprintf\" >\u0110\u1ecbnh d\u1ea1ng cho I\/O: System.out.printf()&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Dinh_dang_hien_dai_Java_15_Text_Blocks\" >\u0110\u1ecbnh d\u1ea1ng hi\u1ec7n \u0111\u1ea1i (Java 15+): Text Blocks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Phuong_phap_hieu_suat_cao_MessageFormat\" >Ph\u01b0\u01a1ng ph\u00e1p hi\u1ec7u su\u1ea5t cao: MessageFormat<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Cac_cau_hoi_thuong_gap_ve_Java_String_Format\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Java String Format<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#Tong_ket\" >T\u1ed5ng k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n\n<p><strong><em>Thay v\u00ec ph\u1ea3i chuy\u1ec3n \u0111\u1ed5i ki\u1ec3u d\u1eef li\u1ec7u v\u00e0 n\u1ed1i nhi\u1ec1u ph\u1ea7n l\u1ea1i v\u1edbi nhau, Java String Format cung c\u1ea5p m\u1ed9t c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u (type-safe), v\u00e0 d\u1ec5 \u0111\u1ecdc h\u01a1n \u0111\u1ec3 ch\u00e8n (insert) v\u00e0 \u0111i\u1ec1u ch\u1ec9nh c\u00e1ch hi\u1ec3n th\u1ecb (format) c\u00e1c gi\u00e1 tr\u1ecb v\u00e0o v\u1ecb tr\u00ed \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u s\u1eb5n trong chu\u1ed7i.<\/em><\/strong><\/p>\n\n\n\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft \u0111\u1ec3 hi\u1ec3u th\u00eam v\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ph\u01b0\u01a1ng ph\u00e1p c\u1ed5 \u0111i\u1ec3n v\u00e0 ph\u1ed5 bi\u1ebfn<\/li>\n\n\n\n<li>\u0110\u1ecbnh d\u1ea1ng cho I\/O: <code>System.out.printf()<\/code>&nbsp;<\/li>\n\n\n\n<li>\u0110\u1ecbnh d\u1ea1ng hi\u1ec7n \u0111\u1ea1i (Java 15+): Text Blocks<\/li>\n\n\n\n<li>Ph\u01b0\u01a1ng ph\u00e1p hi\u1ec7u su\u1ea5t cao: <code>MessageFormat<\/code><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/java-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java l\u00e0 g\u00ec? T\u1ea5t c\u1ea3 nh\u1eefng \u0111i\u1ec1u b\u1ea1n c\u1ea7n bi\u1ebft v\u1ec1 ng\u00f4n ng\u1eef Java<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-java-string-format-la-gi-nbsp\"><span class=\"ez-toc-section\" id=\"Java_String_Format_la_gi\"><\/span><strong>Java String Format l\u00e0 g\u00ec?&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>V\u1ec1 c\u01a1 b\u1ea3n, Java String Format l\u00e0 m\u1ed9t c\u01a1 ch\u1ebf cho ph\u00e9p b\u1ea1n t\u1ea1o ra m\u1ed9t chu\u1ed7i m\u1edbi (String) d\u1ef1a tr\u00ean m\u1ed9t chu\u1ed7i \u0111\u1ecbnh d\u1ea1ng (format string) c\u1ee5 th\u1ec3 v\u00e0 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c \u0111\u1ed1i s\u1ed1 \u0111\u1ea7u v\u00e0o.<\/p>\n\n\n\n<p>C\u01a1 ch\u1ebf n\u00e0y \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 c\u1ed1 h\u1eefu c\u1ee7a vi\u1ec7c n\u1ed1i chu\u1ed7i ph\u1ee9c t\u1ea1p v\u00e0 th\u1ee7 c\u00f4ng (v\u00ed d\u1ee5: s\u1eed d\u1ee5ng to\u00e1n t\u1eed <code>$`<\/code>+<code>`$<\/code>), \u0111\u1eb7c bi\u1ec7t khi b\u1ea1n c\u1ea7n ch\u00e8n nhi\u1ec1u bi\u1ebfn c\u00f3 ki\u1ec3u d\u1eef li\u1ec7u kh\u00e1c nhau (nh\u01b0 s\u1ed1 nguy\u00ean, s\u1ed1 th\u1ef1c, ng\u00e0y) v\u00e0o m\u1ed9t khu\u00f4n m\u1eabu chu\u1ed7i c\u1ed1 \u0111\u1ecbnh.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ph\u01b0\u01a1ng-phap-c\u1ed5-di\u1ec3n-va-ph\u1ed5-bi\u1ebfn-string-format\"><span class=\"ez-toc-section\" id=\"Phuong_phap_co_dien_va_pho_bien_Stringformat\"><\/span><strong>Ph\u01b0\u01a1ng ph\u00e1p c\u1ed5 \u0111i\u1ec3n v\u00e0 ph\u1ed5 bi\u1ebfn: $`String.format()`$<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ph\u01b0\u01a1ng th\u1ee9c t\u0129nh <code>$`String.format()`$<\/code> l\u00e0 c\u00e1ch th\u1ee9c ti\u00eau chu\u1ea9n v\u00e0 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng r\u1ed9ng r\u00e3i nh\u1ea5t trong Java \u0111\u1ec3 th\u1ef1c hi\u1ec7n vi\u1ec7c \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i. \u0110\u00e2y l\u00e0 c\u00f4ng c\u1ee5 kh\u00f4ng th\u1ec3 thi\u1ebfu \u0111\u1ec3 t\u1ea1o ra c\u00e1c chu\u1ed7i \u0111\u1ea7u ra c\u00f3 c\u1ea5u tr\u00fac m\u1ed9t c\u00e1ch linh ho\u1ea1t v\u00e0 d\u1ec5 ki\u1ec3m so\u00e1t.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-nguyen-t\u1eafc-ho\u1ea1t-d\u1ed9ng-c\u1ee7a-string-format\"><strong>Nguy\u00ean t\u1eafc ho\u1ea1t \u0111\u1ed9ng c\u1ee7a <code>String.format()<\/code>&nbsp;<\/strong><\/h3>\n\n\n\n<p>C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a <code>$`String.format()`$<\/code> \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng d\u1ef1a tr\u00ean kh\u00e1i ni\u1ec7m chu\u1ed7i \u0111\u1ecbnh d\u1ea1ng (format string), m\u1ed9t chu\u1ed7i ch\u1ee9a v\u0103n b\u1ea3n c\u1ed1 \u0111\u1ecbnh k\u1ebft h\u1ee3p v\u1edbi c\u00e1c ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng (format specifiers) b\u1eaft \u0111\u1ea7u b\u1eb1ng k\u00fd t\u1ef1 ph\u1ea7n tr\u0103m (<code>$`%`$<\/code>).<\/p>\n\n\n\n<p>Ph\u01b0\u01a1ng th\u1ee9c n\u00e0y l\u1ea5y c\u1ea3m h\u1ee9ng tr\u1ef1c ti\u1ebfp t\u1eeb h\u00e0m <code>$`printf()`$<\/code> ph\u1ed5 bi\u1ebfn trong ng\u00f4n ng\u1eef C. N\u00f3 ho\u1ea1t \u0111\u1ed9ng b\u1eb1ng c\u00e1ch thay th\u1ebf c\u00e1c ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng (<code>$`%s`$<\/code>, <code>$`%d`$<\/code>, <code>$`%f`$<\/code>, v.v.) trong chu\u1ed7i \u0111\u1ecbnh d\u1ea1ng b\u1eb1ng c\u00e1c \u0111\u1ed1i s\u1ed1 th\u1ef1c t\u1ebf \u0111\u01b0\u1ee3c truy\u1ec1n v\u00e0o.<\/p>\n\n\n\n<p>L\u01b0u \u00fd: V\u1ec1 m\u1eb7t k\u1ef9 thu\u1eadt, <code>$`String.format()`$<\/code> s\u1eed d\u1ee5ng l\u1edbp java.util.Formatter \u1ea9n danh \u0111\u1ec3 th\u1ef1c hi\u1ec7n c\u00f4ng vi\u1ec7c \u0111\u1ecbnh d\u1ea1ng, v\u00e0 n\u00f3 ho\u00e0n to\u00e0n t\u01b0\u01a1ng \u0111\u01b0\u01a1ng v\u1edbi vi\u1ec7c s\u1eed d\u1ee5ng <code>$`System.out.printf()`$<\/code> ho\u1eb7c <code>$`PrintStream.printf()`$<\/code>, ch\u1ec9 kh\u00e1c l\u00e0 <code>$`String.format()`$<\/code> tr\u1ea3 v\u1ec1 m\u1ed9t chu\u1ed7i thay v\u00ec in tr\u1ef1c ti\u1ebfp ra console.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-ch\u1ec9-d\u1ecbnh-d\u1ecbnh-d\u1ea1ng-c\u01a1-b\u1ea3n\"><span class=\"ez-toc-section\" id=\"Cac_chi_dinh_dinh_dang_co_ban\"><\/span><strong>C\u00e1c ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng c\u01a1 b\u1ea3n<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>C\u00e1c ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh ki\u1ec3u d\u1eef li\u1ec7u c\u1ee7a \u0111\u1ed1i s\u1ed1 v\u00e0 c\u00e1ch th\u1ee9c hi\u1ec3n th\u1ecb c\u1ee7a n\u00f3.<\/p>\n\n\n\n<p>C\u00fa ph\u00e1p chung l\u00e0:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$`%&#91;flags]&#91;width]&#91;.precision]conversion`$<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>%<\/code><\/strong> l\u00e0 m\u1ed9t k\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t bi\u1ec3u th\u1ecb r\u1eb1ng m\u1ed9t h\u01b0\u1edbng d\u1eabn \u0111\u1ecbnh d\u1ea1ng sau.<\/li>\n\n\n\n<li><strong>[argument index]<\/strong> x\u00e1c \u0111\u1ecbnh ch\u1ec9 s\u1ed1 c\u1ee7a c\u00e1c \u0111\u1ed1i s\u1ed1 \u0111\u1ec3 \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng. N\u1ebfu kh\u00f4ng x\u00e1c \u0111\u1ecbnh c\u1ee5 th\u1ec3, c\u00e1c \u0111\u1ed1i s\u1ed1 s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng theo th\u1ee9 t\u1ef1 nh\u01b0 ch\u00fang xu\u1ea5t hi\u1ec7n trong danh s\u00e1ch \u0111\u1ed1i s\u1ed1.<\/li>\n\n\n\n<li><strong>[flag]<\/strong> l\u00e0 m\u1ed9t h\u01b0\u1edbng d\u1eabn \u0111\u1ecbnh d\u1ea1ng \u0111\u1eb7c bi\u1ec7t. V\u00ed d\u1ee5, c\u1edd + x\u00e1c \u0111\u1ecbnh r\u1eb1ng m\u1ed9t gi\u00e1 tr\u1ecb s\u1ed1 ph\u1ea3i lu\u00f4n lu\u00f4n \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng v\u1edbi m\u1ed9t k\u00fd hi\u1ec7u, v\u00e0 c\u1edd 0 ch\u1ec9 \u0111\u1ecbnh r\u1eb1ng 0 l\u00e0 k\u00fd t\u1ef1 \u0111\u1ec7m. C\u00e1c c\u1edd kh\u00e1c bao g\u1ed3m \u2013 \u0111\u00f3 l\u00e0 pad \u1edf b\u00ean ph\u1ea3i, + pad \u1edf b\u00ean tr\u00e1i (n\u1ebfu \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng l\u00e0 m\u1ed9t chu\u1ed7i). L\u01b0u \u00fd r\u1eb1ng m\u1ed9t s\u1ed1 c\u1edd kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c k\u1ebft h\u1ee3p v\u1edbi m\u1ed9t s\u1ed1 c\u1edd kh\u00e1c ho\u1eb7c v\u1edbi c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng nh\u1ea5t \u0111\u1ecbnh.<\/li>\n\n\n\n<li><strong>[width] <\/strong>x\u00e1c \u0111\u1ecbnh s\u1ed1 l\u01b0\u1ee3ng t\u1ed1i thi\u1ec3u c\u00e1c k\u00fd t\u1ef1 output cho \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u00f3.<\/li>\n\n\n\n<li><strong>[.precession] <\/strong>x\u00e1c \u0111\u1ecbnh ch\u00ednh x\u00e1c c\u1ee7a c\u00e1c s\u1ed1 d\u1ea5u ch\u1ea5m \u0111\u1ed9ng trong output. \u0110\u00f3 l\u00e0 c\u01a1 b\u1ea3n s\u1ed1 ch\u1eef s\u1ed1 th\u1eadp ph\u00e2n b\u1ea1n mu\u1ed1n in tr\u00ean \u0111\u1ea7u ra. Nh\u01b0ng n\u00f3 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho c\u00e1c lo\u1ea1i kh\u00e1c \u0111\u1ec3 c\u1eaft gi\u1ea3m chi\u1ec1u r\u1ed9ng \u0111\u1ea7u ra<\/li>\n\n\n\n<li><strong>type <\/strong>: type v\u00e0 % l\u00e0 c\u00e1c tham s\u1ed1 \u0111\u1ecbnh d\u1ea1ng b\u1eaft bu\u1ed9c duy nh\u1ea5t. type l\u00e0 ki\u1ec3u \u0111\u1ed1i t\u01b0\u1ee3ng s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng trong \u0111\u1ea7u ra. \u0110\u1ed1i v\u1edbi c\u00e1c s\u1ed1 nguy\u00ean <code>d<\/code>, cho c\u00e1c chu\u1ed7i \u0111\u00f3 l\u00e0 <code>s<\/code>, cho c\u00e1c s\u1ed1 d\u1ea5u ph\u1ea9y l\u00e0 <code>f<\/code>, cho c\u00e1c s\u1ed1 nguy\u00ean c\u00f3 \u0111\u1ecbnh d\u1ea1ng hex l\u00e0 <code>x<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ecbnh-d\u1ea1ng-s\u1ed1-nguyen-d\"><strong>\u0110\u1ecbnh d\u1ea1ng s\u1ed1 nguy\u00ean (<code>%d<\/code>)&nbsp;<\/strong><\/h3>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m so\u00e1t \u0111\u1ed9 r\u1ed9ng v\u00e0 c\u00e1ch \u0111\u1ec7m (padding) cho s\u1ed1 nguy\u00ean.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0110\u1ed9 r\u1ed9ng t\u1ed1i thi\u1ec3u: <code>$`%5d`$<\/code> (\u0111\u1ea3m b\u1ea3o s\u1ed1 chi\u1ebfm \u00edt nh\u1ea5t 5 k\u00fd t\u1ef1).<\/li>\n\n\n\n<li>Th\u00eam s\u1ed1 0 \u0111\u1ea7u: <code>$`%05d`$<\/code> (th\u00eam s\u1ed1 0 \u0111\u1ec3 \u0111\u1ea1t \u0111\u1ed9 r\u1ed9ng t\u1ed1i thi\u1ec3u).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ V\u00ed d\u1ee5: \u0110\u1ecbnh d\u1ea1ng s\u1ed1 42 v\u1edbi \u0111\u1ed9 r\u1ed9ng 5, \u0111\u1ec7m b\u1eb1ng s\u1ed1 0\nString result = String.format(\"M\u00e3 s\u1ed1: %05d\", 42); \n\/\/ Output: \"M\u00e3 s\u1ed1: 00042\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ecbnh-d\u1ea1ng-s\u1ed1-th\u1ef1c-f\"><strong>\u0110\u1ecbnh d\u1ea1ng s\u1ed1 th\u1ef1c (<code>%f<\/code>)<\/strong><\/h3>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 ki\u1ec3m so\u00e1t s\u1ed1 ch\u1eef s\u1ed1 sau d\u1ea5u th\u1eadp ph\u00e2n (\u0111\u1ed9 ch\u00ednh x\u00e1c). <strong>\u0110\u1ed9 ch\u00ednh x\u00e1c:<\/strong> <code>$`%.2f`$<\/code> (l\u00e0m tr\u00f2n v\u00e0 hi\u1ec3n th\u1ecb 2 ch\u1eef s\u1ed1 sau d\u1ea5u ph\u1ea9y).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ V\u00ed d\u1ee5: \u0110\u1ecbnh d\u1ea1ng s\u1ed1 Pi v\u1edbi 3 ch\u1eef s\u1ed1 th\u1eadp ph\u00e2n\nString result = String.format(\"Pi l\u00e0: %.3f\", Math.PI); \n\/\/ Output: \"Pi l\u00e0: 3.142\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ecbnh-d\u1ea1ng-chu\u1ed7i-s-va-can-l\u1ec1\"><strong>\u0110\u1ecbnh D\u1ea1ng Chu\u1ed7i (<code>%s<\/code>) v\u00e0 C\u0103n L\u1ec1<\/strong><\/h3>\n\n\n\n<p>S\u1eed d\u1ee5ng c\u1edd (flag) <code>$`-`$<\/code> \u0111\u1ec3 c\u0103n l\u1ec1 tr\u00e1i. M\u1eb7c \u0111\u1ecbnh l\u00e0 c\u0103n l\u1ec1 ph\u1ea3i.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ V\u00ed d\u1ee5: C\u0103n l\u1ec1 tr\u00e1i trong kh\u00f4ng gian 10 k\u00fd t\u1ef1\nString result = String.format(\"|%-10s|\", \"Java\"); \n\/\/ Output: \"|Java      |\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ecbnh-d\u1ea1ng-ngay-va-gi\u1edd-t-t\"><strong>\u0110\u1ecbnh D\u1ea1ng Ng\u00e0y v\u00e0 Gi\u1edd (%t \/ %T)<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ec3 \u0111\u1ecbnh d\u1ea1ng \u0111\u1ed1i t\u01b0\u1ee3ng ng\u00e0y v\u00e0 gi\u1edd (<code>$`java.util.Date`$<\/code> ho\u1eb7c <code>$`java.time.ZonedDateTime`$<\/code>), ta s\u1eed d\u1ee5ng ch\u1ec9 \u0111\u1ecbnh chuy\u1ec3n \u0111\u1ed5i <strong><code>%t<\/code><\/strong> (cho k\u00fd t\u1ef1 th\u01b0\u1eddng) ho\u1eb7c <strong><code>%T<\/code><\/strong> (cho k\u00fd t\u1ef1 hoa) theo sau l\u00e0 k\u00fd t\u1ef1 chuy\u1ec3n \u0111\u1ed5i ng\u00e0y gi\u1edd c\u1ee5 th\u1ec3.<\/p>\n\n\n\n<p>Ta c\u00f3 b\u1ea3ng t\u1ed5ng h\u1ee3p nh\u01b0 sau:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>K\u00fd hi\u1ec7u<\/strong><\/td><td><strong>M\u00f4 t\u1ea3<\/strong><\/td><\/tr><tr><td>%tA<\/td><td>T\u00ean \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a th\u1ee9 trong tu\u1ea7n, v\u00ed d\u1ee5: \u201cTh\u1ee9 2\u201d, \u201cCh\u1ee7 Nh\u1eadt\u201d.<\/td><\/tr><tr><td>%ta<\/td><td>T\u00ean vi\u1ebft t\u1eaft c\u1ee7a th\u1ee9 trong tu\u1ea7n, v\u00ed d\u1ee5: \u201cT2\u201d, \u201cCN\u201d.<\/td><\/tr><tr><td>%tB<\/td><td>T\u00ean \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a th\u00e1ng, v\u00ed d\u1ee5: \u201cJanuary\u201d, \u201cFebruary\u201d.<\/td><\/tr><tr><td>%tb<\/td><td>T\u00ean vi\u1ebft t\u1eaft c\u1ee7a th\u00e1ng, v\u00ed d\u1ee5: \u201cJan\u201d, \u201cFeb\u201d.<\/td><\/tr><tr><td>%tC<\/td><td>Ph\u1ea7n th\u1ebf k\u1ef7 c\u1ee7a n\u0103m, g\u1ed3m 2 ch\u1eef s\u1ed1, v\u00ed d\u1ee5: \u201c00\u201d \u0111\u1ebfn \u201c99\u201d.<\/td><\/tr><tr><td>%tc<\/td><td>Ng\u00e0y gi\u1edd \u0111\u1ea7y \u0111\u1ee7 theo \u0111\u1ecbnh d\u1ea1ng locale, t\u01b0\u01a1ng \u0111\u01b0\u01a1ng <code>%ta %tb %td %tT %tZ %tY<\/code>.<br>V\u00ed d\u1ee5: \u201cFri Feb 17 07:45:42 PST 2017\u201d.<\/td><\/tr><tr><td>%tD<\/td><td>Ng\u00e0y theo \u0111\u1ecbnh d\u1ea1ng <code>%tm\/%td\/%ty<\/code>.<\/td><\/tr><tr><td>%td<\/td><td>Ng\u00e0y trong th\u00e1ng, \u0111\u1ecbnh d\u1ea1ng 2 ch\u1eef s\u1ed1, v\u00ed d\u1ee5: \u201c01\u201d \u0111\u1ebfn \u201c31\u201d.<\/td><\/tr><tr><td>%te<\/td><td>Ng\u00e0y trong th\u00e1ng, kh\u00f4ng c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c1\u201d \u0111\u1ebfn \u201c31\u201d.<\/td><\/tr><tr><td>%tF<\/td><td>Ng\u00e0y theo chu\u1ea9n ISO 8601, \u0111\u1ecbnh d\u1ea1ng <code>%tY-%tm-%td<\/code>.<\/td><\/tr><tr><td>%tH<\/td><td>Gi\u1edd trong ng\u00e0y theo \u0111\u1ecbnh d\u1ea1ng 24 gi\u1edd, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c00\u201d \u0111\u1ebfn \u201c23\u201d.<\/td><\/tr><tr><td>%th<\/td><td>Gi\u1ed1ng v\u1edbi <code>%tb<\/code> (t\u00ean vi\u1ebft t\u1eaft c\u1ee7a th\u00e1ng).<\/td><\/tr><tr><td>%tI<\/td><td>Gi\u1edd trong ng\u00e0y theo \u0111\u1ecbnh d\u1ea1ng 12 gi\u1edd, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c01\u201d \u0111\u1ebfn \u201c12\u201d.<\/td><\/tr><tr><td>%tj<\/td><td>Ng\u00e0y th\u1ee9 bao nhi\u00eau trong n\u0103m, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c001\u201d \u0111\u1ebfn \u201c366\u201d.<\/td><\/tr><tr><td>%tk<\/td><td>Gi\u1edd trong ng\u00e0y theo \u0111\u1ecbnh d\u1ea1ng 24 gi\u1edd, kh\u00f4ng c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c0\u201d \u0111\u1ebfn \u201c23\u201d.<\/td><\/tr><tr><td>%tl<\/td><td>Gi\u1edd trong ng\u00e0y theo \u0111\u1ecbnh d\u1ea1ng 12 gi\u1edd, kh\u00f4ng c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c1\u201d \u0111\u1ebfn \u201c12\u201d.<\/td><\/tr><tr><td>%tM<\/td><td>Ph\u00fat trong gi\u1edd, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c00\u201d \u0111\u1ebfn \u201c59\u201d.<\/td><\/tr><tr><td>%tm<\/td><td>Th\u00e1ng, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c01\u201d \u0111\u1ebfn \u201c12\u201d.<\/td><\/tr><tr><td>%tN<\/td><td>Nano gi\u00e2y, g\u1ed3m 9 ch\u1eef s\u1ed1, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, v\u00ed d\u1ee5: \u201c000000000\u201d \u0111\u1ebfn \u201c999999999\u201d.<\/td><\/tr><tr><td>%tp<\/td><td>K\u00fd hi\u1ec7u \u201cam\u201d ho\u1eb7c \u201cpm\u201d theo locale.<\/td><\/tr><tr><td>%tQ<\/td><td>S\u1ed1 mili-gi\u00e2y t\u00ednh t\u1eeb m\u1ed1c th\u1eddi gian Unix (01\/01\/1970 00:00:00 UTC).<\/td><\/tr><tr><td>%tR<\/td><td>Th\u1eddi gian theo \u0111\u1ecbnh d\u1ea1ng 24 gi\u1edd, <code>%tH:%tM<\/code>.<\/td><\/tr><tr><td>%tr<\/td><td>Th\u1eddi gian theo \u0111\u1ecbnh d\u1ea1ng 12 gi\u1edd, <code>%tI:%tM:%tS %Tp<\/code>.<\/td><\/tr><tr><td>%tS<\/td><td>Gi\u00e2y trong ph\u00fat, c\u00f3 s\u1ed1 0 ph\u00eda tr\u01b0\u1edbc, \u201c00\u201d \u0111\u1ebfn \u201c60\u201d (60 d\u00f9ng cho gi\u00e2y nhu\u1eadn).<\/td><\/tr><tr><td>%ts<\/td><td>S\u1ed1 gi\u00e2y t\u00ednh t\u1eeb m\u1ed1c th\u1eddi gian Unix (01\/01\/1970 00:00:00 UTC).<\/td><\/tr><tr><td>%tT<\/td><td>Th\u1eddi gian theo \u0111\u1ecbnh d\u1ea1ng 24 gi\u1edd, <code>%tH:%tM:%tS<\/code>.<\/td><\/tr><tr><td>%tY<\/td><td>N\u0103m \u0111\u1ea7y \u0111\u1ee7 4 ch\u1eef s\u1ed1, v\u00ed d\u1ee5: \u201c0000\u201d \u0111\u1ebfn \u201c9999\u201d.<\/td><\/tr><tr><td>%ty<\/td><td>N\u0103m r\u00fat g\u1ecdn 2 ch\u1eef s\u1ed1, v\u00ed d\u1ee5: \u201c00\u201d \u0111\u1ebfn \u201c99\u201d.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>V\u00ed d\u1ee5 v\u1ec1 c\u00e1ch s\u1eed d\u1ee5ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.time.LocalDateTime;\n\/\/ V\u00ed d\u1ee5: L\u1ea5y ng\u00e0y, th\u00e1ng v\u00e0 n\u0103m\nLocalDateTime now = LocalDateTime.now();\nString date = String.format(\"H\u00f4m nay l\u00e0 %ta, ng\u00e0y %td th\u00e1ng %tm n\u0103m %tY\", \n                            now, now, now, now);\n\/\/ Output: \"H\u00f4m nay l\u00e0 T2, ng\u00e0y 17 th\u00e1ng 11 n\u0103m 2025\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ed1i-s\u1ed1-argument-index\"><strong>\u0110\u1ed1i s\u1ed1 (Argument Index)<\/strong><\/h3>\n\n\n\n<p>M\u1ed9t t\u00ednh n\u0103ng m\u1ea1nh m\u1ebd gi\u00fap c\u1ea3i thi\u1ec7n \u0111\u00e1ng k\u1ec3 kh\u1ea3 n\u0103ng \u0111\u1ecdc v\u00e0 t\u00e1i s\u1eed d\u1ee5ng \u0111\u1ed1i s\u1ed1 l\u00e0 s\u1eed d\u1ee5ng ch\u1ec9 s\u1ed1 \u0111\u1ed1i s\u1ed1 (Argument Index), \u0111\u01b0\u1ee3c bi\u1ec3u di\u1ec5n b\u1eb1ng <code>$N$<\/code>, trong \u0111\u00f3 <code>$`N`$<\/code> l\u00e0 ch\u1ec9 m\u1ee5c c\u1ee7a \u0111\u1ed1i s\u1ed1 (b\u1eaft \u0111\u1ea7u t\u1eeb <code>$1$\\<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$`%&#91;argument_index]$&#91;flags]&#91;width]&#91;.precision]conversion\\`$<\/code><\/pre>\n\n\n\n<p>T\u00ednh n\u0103ng n\u00e0y cho ph\u00e9p b\u1ea1n:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>T\u00e1i s\u1eed d\u1ee5ng m\u1ed9t \u0111\u1ed1i s\u1ed1 nhi\u1ec1u l\u1ea7n m\u00e0 kh\u00f4ng c\u1ea7n l\u1eb7p l\u1ea1i n\u00f3 trong danh s\u00e1ch tham s\u1ed1.<\/li>\n\n\n\n<li>S\u1eafp x\u1ebfp l\u1ea1i \u0111\u1ed1i s\u1ed1 trong tr\u01b0\u1eddng h\u1ee3p c\u1ea7n h\u1ed7 tr\u1ee3 ng\u00f4n ng\u1eef kh\u00e1c (v\u00ed d\u1ee5: trong ti\u1ebfng Anh, th\u1ee9 t\u1ef1 t\u00ean v\u00e0 tu\u1ed5i kh\u00e1c v\u1edbi ti\u1ebfng Vi\u1ec7t).<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>String name = \"Minh\";\nint age = 25;\n\/\/ T\u00e1i s\u1eed d\u1ee5ng \u0111\u1ed1i s\u1ed1 (Ch\u1ec9 m\u1ee5c 1$ l\u00e0 'name')\nString result = String.format(\n    \"T\u00ean: %1$s (L\u1eb7p l\u1ea1i: %1$s). Tu\u1ed5i: %2$d.\", \n    name, age\n);\n\/\/ Output: \"T\u00ean: Minh (L\u1eb7p l\u1ea1i: Minh). Tu\u1ed5i: 25.\"<\/code><\/pre>\n\n\n\n<p>\u0110\u00e2y l\u00e0 n\u1ec1n t\u1ea3ng v\u1eefng ch\u1eafc \u0111\u1ec3 b\u1ea1n b\u01b0\u1edbc v\u00e0o c\u00e1c k\u1ef9 thu\u1eadt \u0111\u1ecbnh d\u1ea1ng n\u00e2ng cao h\u01a1n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-d\u1ecbnh-d\u1ea1ng-cho-i-o-system-out-printf\"><span class=\"ez-toc-section\" id=\"Dinh_dang_cho_IO_Systemoutprintf\"><\/span><strong>\u0110\u1ecbnh d\u1ea1ng cho I\/O: System.out.printf()&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>M\u1eb7c d\u00f9 <code>$`String.format()`$<\/code> l\u00e0 l\u1ef1a ch\u1ecdn l\u00fd t\u01b0\u1edfng \u0111\u1ec3 t\u1ea1o ra c\u00e1c chu\u1ed7i \u0111\u01b0\u1ee3c \u0111\u1ecbnh d\u1ea1ng \u0111\u1ec3 s\u1eed d\u1ee5ng trong logic \u1ee9ng d\u1ee5ng, <code>System.out.printf()<\/code> l\u1ea1i l\u00e0 c\u00f4ng c\u1ee5 kh\u00f4ng th\u1ec3 thi\u1ebfu khi b\u1ea1n c\u1ea7n in tr\u1ef1c ti\u1ebfp d\u1eef li\u1ec7u ra console ho\u1eb7c lu\u1ed3ng \u0111\u1ea7u ra chu\u1ea9n (Standard Output &#8211; STDOUT).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-m\u1ed1i-quan-h\u1ec7-gi\u1eefa-printf-va-string-format\"><strong>M\u1ed1i quan h\u1ec7 gi\u1eefa <code>printf()<\/code> v\u00e0 <code>String.format()<\/code><\/strong><\/h3>\n\n\n\n<p>Hai ph\u01b0\u01a1ng th\u1ee9c n\u00e0y chia s\u1ebb m\u1ed9t m\u1ed1i quan h\u1ec7 c\u1ed9ng sinh v\u00ec ch\u00fang \u0111\u01b0\u1ee3c x\u00e2y d\u1ef1ng tr\u00ean c\u00f9ng m\u1ed9t c\u01a1 ch\u1ebf n\u1ec1n t\u1ea3ng:<\/p>\n\n\n\n<p>C\u1ea3 <code>$`System.out.printf()`$<\/code> v\u00e0 <code>$`String.format()`$<\/code> \u0111\u1ec1u s\u1eed d\u1ee5ng c\u00fa ph\u00e1p \u0111\u1ecbnh d\u1ea1ng c\u1ee7a l\u1edbp <code>$`java.util.Formatter`$<\/code> (bao g\u1ed3m c\u00e1c ch\u1ec9 \u0111\u1ecbnh <code>$`%s`$<\/code>, <code>$`%d`$<\/code>, <code>$`%f`$<\/code>, <code>$`%t`$<\/code>, v.v.) m\u00e0 ch\u00fang ta \u0111\u00e3 t\u00ecm hi\u1ec3u \u1edf ph\u1ea7n tr\u01b0\u1edbc.<\/p>\n\n\n\n<p>\u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 m\u1ecdi quy t\u1eafc v\u1ec1 c\u0103n l\u1ec1, \u0111\u1ed9 ch\u00ednh x\u00e1c, v\u00e0 ch\u1ec9 s\u1ed1 \u0111\u1ed1i s\u1ed1 \u0111\u1ec1u \u00e1p d\u1ee5ng cho c\u1ea3 hai.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-di\u1ec3m-khac-bi\u1ec7t\"><strong>\u0110i\u1ec3m kh\u00e1c bi\u1ec7t<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>String.format(...)<\/code><\/strong> tr\u1ea3 v\u1ec1 m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng <code>$`String`$<\/code> m\u1edbi.<\/li>\n\n\n\n<li><strong><code>System.out.printf(...)<\/code><\/strong> (th\u1ef1c ch\u1ea5t l\u00e0 m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c c\u1ee7a l\u1edbp <code>$`PrintStream`$<\/code>) <strong>in<\/strong> chu\u1ed7i \u0111\u00e3 \u0111\u1ecbnh d\u1ea1ng tr\u1ef1c ti\u1ebfp ra lu\u1ed3ng \u0111\u1ea7u ra chu\u1ea9n <code>$`System.out`$<\/code>, v\u00e0 tr\u1ea3 v\u1ec1 \u0111\u1ed1i t\u01b0\u1ee3ng <code>$`PrintStream`$<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>N\u00f3i c\u00e1ch kh\u00e1c, <code>$`System.out.printf(format, args)`$<\/code> v\u1ec1 c\u01a1 b\u1ea3n l\u00e0 c\u00e1ch vi\u1ebft ng\u1eafn g\u1ecdn c\u1ee7a <code>$`System.out.print(String.format(format, args))`$<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>double value = 123.456;\n\n\/\/ String.format(): Tr\u1ea3 v\u1ec1 chu\u1ed7i \u0111\u1ec3 g\u00e1n ho\u1eb7c s\u1eed d\u1ee5ng\nString formattedString = String.format(\"Gi\u00e1 tr\u1ecb: $%.2f\", value);\n\n\/\/ System.out.printf(): In tr\u1ef1c ti\u1ebfp ra console\nSystem.out.printf(\"Gi\u00e1 tr\u1ecb: $%.2f%n\", value); \n\/\/ %n l\u00e0 ch\u1ec9 \u0111\u1ecbnh ng\u1eaft d\u00f2ng (newline) ho\u1ea1t \u0111\u1ed9ng tr\u00ean m\u1ecdi h\u1ec7 \u0111i\u1ec1u h\u00e0nh<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-d\u1ecbnh-d\u1ea1ng-hi\u1ec7n-d\u1ea1i-java-15-text-blocks\"><span class=\"ez-toc-section\" id=\"Dinh_dang_hien_dai_Java_15_Text_Blocks\"><\/span><strong>\u0110\u1ecbnh d\u1ea1ng hi\u1ec7n \u0111\u1ea1i (Java 15+): Text Blocks<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Tr\u01b0\u1edbc Java 15, vi\u1ec7c t\u1ea1o ra c\u00e1c chu\u1ed7i \u0111a d\u00f2ng (multi-line strings) ho\u1eb7c c\u00e1c chu\u1ed7i ch\u1ee9a k\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t (nh\u01b0 JSON, HTML, SQL) r\u1ea5t kh\u00f3 kh\u0103n, \u0111\u00f2i h\u1ecfi ph\u1ea3i s\u1eed d\u1ee5ng nhi\u1ec1u k\u00fd t\u1ef1 tho\u00e1t $`\\n`$, $`\\&#8221;`$, v\u00e0 ph\u00e9p n\u1ed1i chu\u1ed7i $`+`$.<\/p>\n\n\n\n<p><strong>Text Blocks<\/strong> (Ch\u1eb7n V\u0103n B\u1ea3n) ra \u0111\u1eddi \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y, c\u1ea3i thi\u1ec7n \u0111\u00e1ng k\u1ec3 kh\u1ea3 n\u0103ng \u0111\u1ecdc v\u00e0 vi\u1ebft m\u00e3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-text-blocks-la-gi\"><strong>Text Blocks l\u00e0 g\u00ec?<\/strong><\/h3>\n\n\n\n<p>Text Blocks l\u00e0 m\u1ed9t t\u00ednh n\u0103ng c\u1ee7a Java, \u0111\u01b0\u1ee3c ch\u00ednh th\u1ee9c gi\u1edbi thi\u1ec7u trong Java 15, cho ph\u00e9p b\u1ea1n t\u1ea1o ra m\u1ed9t chu\u1ed7i \u0111a d\u00f2ng m\u00e0 kh\u00f4ng c\u1ea7n s\u1eed d\u1ee5ng k\u00fd t\u1ef1 tho\u00e1t cho c\u00e1c d\u00f2ng m\u1edbi (<code>$`\\n`$<\/code>) ho\u1eb7c d\u1ea5u ngo\u1eb7c k\u00e9p (<code>$`\"`$<\/code>).<\/p>\n\n\n\n<p><strong>C\u00fa ph\u00e1p v\u00e0 l\u1ee3i \u00edch:<\/strong><\/p>\n\n\n\n<p>Text Blocks s\u1eed d\u1ee5ng c\u00fa ph\u00e1p ba d\u1ea5u ngo\u1eb7c k\u00e9p m\u1edf v\u00e0 \u0111\u00f3ng: <code>$`\"\"\"...\"\"\"`$<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u1edf:<\/strong> B\u1eaft \u0111\u1ea7u b\u1eb1ng ba d\u1ea5u ngo\u1eb7c k\u00e9p ($`&#8221;&#8221;&#8221;`$) theo sau l\u00e0 m\u1ed9t k\u00fd t\u1ef1 xu\u1ed1ng d\u00f2ng (new line).<\/li>\n\n\n\n<li><strong>N\u1ed9i dung:<\/strong> Ch\u1ee9a n\u1ed9i dung chu\u1ed7i, c\u00f3 th\u1ec3 tr\u1ea3i d\u00e0i tr\u00ean nhi\u1ec1u d\u00f2ng.<\/li>\n\n\n\n<li><strong>\u0110\u00f3ng:<\/strong> K\u1ebft th\u00fac b\u1eb1ng ba d\u1ea5u ngo\u1eb7c k\u00e9p ($`&#8221;&#8221;&#8221;`$).<\/li>\n<\/ul>\n\n\n\n<p><strong>L\u1ee3i \u00edch ch\u00ednh:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0110\u01a1n gi\u1ea3n h\u00f3a chu\u1ed7i \u0111a d\u00f2ng:<\/strong> Lo\u1ea1i b\u1ecf nhu c\u1ea7u s\u1eed d\u1ee5ng $`\\n`$ cho m\u1ed7i d\u00f2ng m\u1edbi.<\/li>\n\n\n\n<li><strong>Gi\u1ea3m k\u00fd t\u1ef1 tho\u00e1t:<\/strong> B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng d\u1ea5u ngo\u1eb7c k\u00e9p $`&#8221;`$ trong n\u1ed9i dung m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i tho\u00e1t ($`\\&#8221;`$).<\/li>\n\n\n\n<li><strong>Kh\u1ea3 n\u0103ng \u0111\u1ecdc m\u00e3 cao:<\/strong> D\u1ec5 d\u00e0ng h\u00ecnh dung c\u1ea5u tr\u00fac \u0111\u1ea7u ra (nh\u01b0 JSON ho\u1eb7c HTML) ngay trong m\u00e3 ngu\u1ed3n.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Tr\u01b0\u1edbc \u0111\u00e2y (Java &lt; 15)\nString htmlOld = \"&lt;html&gt;\\n\" +\n                 \"    &lt;body&gt;\\n\" +\n                 \"        &lt;h1&gt;Ti\u00eau \u0111\u1ec1&lt;\/h1&gt;\\n\" +\n                 \"    &lt;\/body&gt;\\n\" +\n                 \"&lt;\/html&gt;\";\n\n\/\/ V\u1edbi Text Blocks (Java 15+)\nString htmlNew = \"\"\"\n        &lt;html&gt;\n            &lt;body&gt;\n                &lt;h1&gt;Ti\u00eau \u0111\u1ec1&lt;\/h1&gt;\n            &lt;\/body&gt;\n        &lt;\/html&gt;\n        \"\"\";<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-k\u1ebft-h\u1ee3p-text-blocks-v\u1edbi-string-format\"><strong>K\u1ebft h\u1ee3p Text Blocks v\u1edbi String.format()<\/strong><\/h3>\n\n\n\n<p>S\u1ee9c m\u1ea1nh th\u1ef1c s\u1ef1 c\u1ee7a Text Blocks \u0111\u01b0\u1ee3c ph\u00e1t huy khi n\u00f3 \u0111\u01b0\u1ee3c k\u1ebft h\u1ee3p v\u1edbi ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i quen thu\u1ed9c $`String.format()`$.<\/p>\n\n\n\n<p><strong>C\u00e1ch l\u00e0m:<\/strong> S\u1eed d\u1ee5ng Text Blocks \u0111\u1ec3 t\u1ea1o khu\u00f4n m\u1eabu \u0111a d\u00f2ng, sau \u0111\u00f3 ch\u00e8n c\u00e1c ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng ($`%s`$, $`%d`$, v.v.) v\u00e0o khu\u00f4n m\u1eabu \u0111\u00f3. Cu\u1ed1i c\u00f9ng, \u00e1p d\u1ee5ng <code>$`String.format()`$<\/code> \u0111\u1ec3 \u0111i\u1ec1n d\u1eef li\u1ec7u \u0111\u1ed9ng v\u00e0o c\u00e1c v\u1ecb tr\u00ed \u0111\u00e3 \u0111\u00e1nh d\u1ea5u.<\/p>\n\n\n\n<p><strong>V\u00ed d\u1ee5: T\u1ea1o chu\u1ed7i JSON ph\u1ee9c t\u1ea1p<\/strong><\/p>\n\n\n\n<p>Gi\u1ea3 s\u1eed b\u1ea1n c\u1ea7n t\u1ea1o m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng JSON v\u00e0 \u0111i\u1ec1n t\u00ean s\u1ea3n ph\u1ea9m, gi\u00e1, v\u00e0 s\u1ed1 l\u01b0\u1ee3ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>String product = \"Laptop X1\";\ndouble price = 1500.99;\nint stock = 20;\n\n\/\/ Text Block l\u00e0m khu\u00f4n m\u1eabu, s\u1eed d\u1ee5ng %s v\u00e0 %.2f\nString jsonTemplate = \"\"\"\n{\n    \"productName\": \"%s\",\n    \"details\": {\n        \"price\": \"%.2f\",\n        \"stock\": %d\n    },\n    \"status\": \"Available\"\n}\n\"\"\";\n\n\/\/ S\u1eed d\u1ee5ng String.format() \u0111\u1ec3 \u0111i\u1ec1n d\u1eef li\u1ec7u v\u00e0o khu\u00f4n m\u1eabu\nString finalJson = String.format(jsonTemplate, product, price, stock);\n\nSystem.out.println(finalJson);<\/code><\/pre>\n\n\n\n<p><strong>L\u1ee3i \u00edch:<\/strong> B\u1eb1ng c\u00e1ch n\u00e0y, b\u1ea1n gi\u1eef \u0111\u01b0\u1ee3c s\u1ef1 r\u00f5 r\u00e0ng c\u1ee7a c\u1ea5u tr\u00fac JSON\/HTML\/SQL v\u00e0 t\u1eadn d\u1ee5ng kh\u1ea3 n\u0103ng \u0111\u1ecbnh d\u1ea1ng m\u1ea1nh m\u1ebd c\u1ee7a <code>$`String.format()`$<\/code> \u0111\u1ec3 ki\u1ec3m so\u00e1t \u0111\u1ed9 ch\u00ednh x\u00e1c c\u1ee7a s\u1ed1 th\u1ef1c ($`%.2f`$) v\u00e0 c\u00e1c y\u1ebfu t\u1ed1 kh\u00e1c.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ph\u01b0\u01a1ng-phap-hi\u1ec7u-su\u1ea5t-cao-messageformat\"><span class=\"ez-toc-section\" id=\"Phuong_phap_hieu_suat_cao_MessageFormat\"><\/span><strong>Ph\u01b0\u01a1ng ph\u00e1p hi\u1ec7u su\u1ea5t cao: <\/strong><strong>MessageFormat<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><code>$`java.text.MessageFormat`$<\/code> l\u00e0 m\u1ed9t l\u1edbp m\u1ea1nh m\u1ebd \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 t\u1ea1o ra c\u00e1c th\u00f4ng b\u00e1o (messages) \u0111\u01b0\u1ee3c b\u1ea3n \u0111\u1ecba h\u00f3a (localized) v\u00e0 ph\u1ee9c t\u1ea1p. M\u1eb7c d\u00f9 c\u00f3 v\u1ebb ngo\u00e0i \u0111\u01a1n gi\u1ea3n, n\u00f3 l\u00e0 c\u00f4ng c\u1ee5 h\u00e0ng \u0111\u1ea7u cho c\u00e1c \u1ee9ng d\u1ee5ng \u0111a ng\u00f4n ng\u1eef, n\u01a1i th\u1ee9 t\u1ef1 v\u00e0 \u0111\u1ecbnh d\u1ea1ng c\u1ee7a c\u00e1c ph\u1ea7n t\u1eed thay \u0111\u1ed5i theo ng\u00f4n ng\u1eef.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-khi-nao-nen-dung-messageformat\"><strong>Khi n\u00e0o n\u00ean d\u00f9ng <\/strong><strong>MessageFormat?<\/strong><\/h3>\n\n\n\n<p><code>$`MessageFormat`$<\/code> th\u1ef1c s\u1ef1 t\u1ecfa s\u00e1ng trong c\u00e1c t\u00ecnh hu\u1ed1ng m\u00e0 $<code>String.format()<\/code>$ g\u1eb7p kh\u00f3 kh\u0103n, c\u1ee5 th\u1ec3 l\u00e0:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>B\u1ea3n \u0110\u1ecba H\u00f3a (Localization &#8211; L10n):<\/strong> Khi b\u1ea1n c\u1ea7n thay \u0111\u1ed5i th\u1ee9 t\u1ef1 c\u00e1c \u0111\u1ed1i s\u1ed1 trong c\u00e2u t\u00f9y thu\u1ed9c v\u00e0o ng\u00f4n ng\u1eef. V\u00ed d\u1ee5: &#8220;T\u00ean t\u00f4i l\u00e0 [T\u00ean]&#8221; trong ti\u1ebfng Vi\u1ec7t c\u00f3 th\u1ec3 ng\u01b0\u1ee3c l\u1ea1i trong m\u1ed9t s\u1ed1 ng\u00f4n ng\u1eef kh\u00e1c.<\/li>\n\n\n\n<li><strong>\u0110\u1ecbnh D\u1ea1ng \u0110\u1ed1i T\u01b0\u1ee3ng N\u00e2ng Cao:<\/strong> T\u00edch h\u1ee3p c\u00e1c ki\u1ec3u \u0111\u1ecbnh d\u1ea1ng ph\u1ee9c t\u1ea1p nh\u01b0 <strong>ti\u1ec1n t\u1ec7 (Currency)<\/strong>, <strong>ng\u00e0y th\u00e1ng (Date\/Time)<\/strong>, <strong>s\u1ed1 ph\u1ea7n tr\u0103m (Percent)<\/strong> m\u00e0 kh\u00f4ng c\u1ea7n s\u1eed d\u1ee5ng c\u00e1c ch\u1ec9 \u0111\u1ecbnh $`%`$ r\u01b0\u1eddm r\u00e0.<\/li>\n\n\n\n<li><strong>X\u1eed L\u00fd S\u1ed1 Nhi\u1ec1u (Pluralization):<\/strong> Gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 ng\u1eef ph\u00e1p ph\u1ee9c t\u1ea1p khi s\u1ed1 l\u01b0\u1ee3ng thay \u0111\u1ed5i (v\u00ed d\u1ee5: &#8220;1 con m\u00e8o&#8221; kh\u00e1c v\u1edbi &#8220;2 con m\u00e8o&#8221;).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cu-phap-c\u01a1-b\u1ea3n\"><strong>C\u00fa ph\u00e1p c\u01a1 b\u1ea3n<\/strong><\/h3>\n\n\n\n<p>Kh\u00e1c v\u1edbi <code>$`String.format()`$<\/code> s\u1eed d\u1ee5ng $`%`$, <code>$`MessageFormat`$<\/code> s\u1eed d\u1ee5ng c\u00fa ph\u00e1p ch\u1ec9 s\u1ed1 \u0111\u1ed1i s\u1ed1 trong ngo\u1eb7c nh\u1ecdn <code>$`{N}`$<\/code>.<\/p>\n\n\n\n<p><strong>C\u00fa ph\u00e1p:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MessageFormat.format(format_string, arg0, arg1, arg2, ...);<\/code><\/pre>\n\n\n\n<p><strong>V\u00ed d\u1ee5 c\u01a1 b\u1ea3n:<\/strong><\/p>\n\n\n\n<p>Ch\u00fang ta s\u1eed d\u1ee5ng ch\u1ec9 s\u1ed1 <code>$`{0}`$<\/code>, <code>$`{1}`$<\/code>, <code>$`{2}`$<\/code> \u0111\u1ec3 \u0111\u1ea1i di\u1ec7n cho c\u00e1c \u0111\u1ed1i s\u1ed1 theo th\u1ee9 t\u1ef1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.text.MessageFormat;\n\nString template = \"Kh\u00e1ch h\u00e0ng {0} \u0111\u00e3 \u0111\u1eb7t mua {1} s\u1ea3n ph\u1ea9m v\u1edbi t\u1ed5ng gi\u00e1 tr\u1ecb {2}.\";\nString customerName = \"Th\u1eafng\";\nint quantity = 5;\ndouble totalAmount = 99.5;\n\nString result = MessageFormat.format(template, \n                                     customerName, \n                                     quantity, \n                                     totalAmount);\n\n\/\/ Output: \"Kh\u00e1ch h\u00e0ng Th\u1eafng \u0111\u00e3 \u0111\u1eb7t mua 5 s\u1ea3n ph\u1ea9m v\u1edbi t\u1ed5ng gi\u00e1 tr\u1ecb 99.5.\"<\/code><\/pre>\n\n\n\n<p><strong>V\u00ed d\u1ee5 v\u1ec1 \u0111\u1ecbnh d\u1ea1ng ti\u1ec1n t\u1ec7 v\u00e0 s\u1ed1 nhi\u1ec1u (Pluralization)<\/strong><\/p>\n\n\n\n<p><code>$`MessageFormat`$<\/code> cho ph\u00e9p b\u1ea1n nh\u00fang c\u00e1c ki\u1ec3u \u0111\u1ecbnh d\u1ea1ng n\u00e2ng cao v\u00e0o b\u00ean trong ch\u1ec9 s\u1ed1 \u0111\u1ed1i s\u1ed1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0110\u1ecbnh d\u1ea1ng Ti\u1ec1n T\u1ec7:<\/strong> C\u00fa ph\u00e1p: <code>$`{index, number, currency}`$<\/code><\/li>\n\n\n\n<li><strong>X\u1eed l\u00fd S\u1ed1 Nhi\u1ec1u (Pluralization):<\/strong> C\u00fa ph\u00e1p: <code>$`{index, plural, rules...}`$<\/code> (\u0110\u00e2y l\u00e0 t\u00ednh n\u0103ng r\u1ea5t m\u1ea1nh m\u1ebd nh\u01b0ng c\u00f3 c\u00fa ph\u00e1p ph\u1ee9c t\u1ea1p h\u01a1n nhi\u1ec1u).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.text.MessageFormat;\nimport java.util.Locale;\n\n\/\/ Thi\u1ebft l\u1eadp \u0111\u1ecbnh d\u1ea1ng cho Ti\u1ec1n T\u1ec7 (Locale.US \u0111\u1ec3 d\u1ec5 th\u1ea5y \u0111\u1ecbnh d\u1ea1ng $)\nString currencyTemplate = \"Gi\u00e1 tr\u1ecb \u0111\u01a1n h\u00e0ng l\u00e0 {0, number, currency} v\u00e0o ng\u00e0y {1, date, long}.\";\n\nString formattedCurrency = MessageFormat.format(currencyTemplate, \n                                              20500.75, \n                                              new java.util.Date());\n\n\/\/ Output c\u00f3 th\u1ec3 l\u00e0: \"Gi\u00e1 tr\u1ecb \u0111\u01a1n h\u00e0ng l\u00e0 $20,500.75 v\u00e0o ng\u00e0y November 17, 2025.\" \n\/\/ (T\u00f9y thu\u1ed9c v\u00e0o Locale m\u1eb7c \u0111\u1ecbnh c\u1ee7a h\u1ec7 th\u1ed1ng)<\/code><\/pre>\n\n\n\n<p><strong>L\u1ee3i \u00edch:<\/strong> <code>$`MessageFormat`$<\/code> t\u1ef1 \u0111\u1ed9ng \u0111i\u1ec1u ch\u1ec9nh \u0111\u1ecbnh d\u1ea1ng ti\u1ec1n t\u1ec7 (k\u00fd hi\u1ec7u $$, $`\u20ac`$, $`\u20ab\\`$) v\u00e0 \u0111\u1ecbnh d\u1ea1ng ng\u00e0y th\u00e1ng theo Locale hi\u1ec7n t\u1ea1i c\u1ee7a \u1ee9ng d\u1ee5ng, l\u00e0m cho n\u00f3 tr\u1edf th\u00e0nh c\u00f4ng c\u1ee5 t\u1ed1i th\u01b0\u1ee3ng cho b\u1ea3n \u0111\u1ecba h\u00f3a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-cau-h\u1ecfi-th\u01b0\u1eddng-g\u1eb7p-v\u1ec1-java-string-format\"><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_thuong_gap_ve_Java_String_Format\"><\/span><strong>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Java String Format<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-string-format-co-an-toan-cho-thread-thread-safe-khong\"><strong>String.format()<\/strong><strong> c\u00f3 an to\u00e0n cho Thread (Thread-Safe) kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Ph\u01b0\u01a1ng th\u1ee9c t\u0129nh <code>$`String.format()`$<\/code> l\u00e0 an to\u00e0n cho Thread (Thread-Safe) v\u00ec n\u00f3 s\u1eed d\u1ee5ng m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng <code>$`java.util.Formatter`$<\/code> c\u1ee5c b\u1ed9 b\u00ean trong (local to the method call) v\u00e0 kh\u00f4ng chia s\u1ebb tr\u1ea1ng th\u00e1i gi\u1eefa c\u00e1c thread. M\u1ed7i l\u1ea7n g\u1ecdi <code>$`String.format()`$<\/code> l\u00e0 \u0111\u1ed9c l\u1eadp v\u1edbi c\u00e1c l\u1ea7n g\u1ecdi kh\u00e1c.<\/p>\n\n\n\n<p>Tuy nhi\u00ean, n\u1ebfu b\u1ea1n t\u1ea1o v\u00e0 t\u00e1i s\u1eed d\u1ee5ng m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng <code>$`Formatter`$<\/code> ho\u1eb7c <code>$`MessageFormat`$<\/code> th\u1ee7 c\u00f4ng gi\u1eefa c\u00e1c thread, ch\u00fang kh\u00f4ng an to\u00e0n cho Thread v\u00e0 b\u1ea1n c\u1ea7n ph\u1ea3i \u0111\u1ed3ng b\u1ed9 h\u00f3a (synchronize) truy c\u1eadp.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-lam-cach-nao-d\u1ec3-x\u1eed-ly-java-util-illegalformatexception\"><strong>L\u00e0m c\u00e1ch n\u00e0o \u0111\u1ec3 x\u1eed l\u00fd <\/strong><strong>java.util.IllegalFormatException<\/strong><strong>?<\/strong><\/h3>\n\n\n\n<p>L\u1ed7i n\u00e0y x\u1ea3y ra khi c\u00f3 s\u1ef1 kh\u00f4ng kh\u1edbp gi\u1eefa ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng (format specifier) v\u00e0 ki\u1ec3u d\u1eef li\u1ec7u c\u1ee7a \u0111\u1ed1i s\u1ed1 t\u01b0\u01a1ng \u1ee9ng.<\/p>\n\n\n\n<p>V\u00ed d\u1ee5: B\u1ea1n s\u1eed d\u1ee5ng <code>$`%d`$<\/code> (mong \u0111\u1ee3i m\u1ed9t s\u1ed1 nguy\u00ean) nh\u01b0ng l\u1ea1i truy\u1ec1n v\u00e0o m\u1ed9t chu\u1ed7i (<code>$`String`$<\/code>).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ L\u1ed7i: Truy\u1ec1n \"hello\" (String) v\u00e0o %d (Decimal)\nString.format(\"Gi\u00e1 tr\u1ecb l\u00e0: %d\", \"hello\"); \n\/\/ S\u1ebd n\u00e9m ra IllegalFormatException<\/code><\/pre>\n\n\n\n<p><strong>C\u00e1ch kh\u1eafc ph\u1ee5c:<\/strong><\/p>\n\n\n\n<p>Ki\u1ec3m tra k\u1ef9 c\u00fa ph\u00e1p <code>$`%`$<\/code> v\u00e0 \u0111\u1ea3m b\u1ea3o ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng kh\u1edbp v\u1edbi ki\u1ec3u d\u1eef li\u1ec7u c\u1ee7a \u0111\u1ed1i s\u1ed1 \u0111\u01b0\u1ee3c truy\u1ec1n v\u00e0o.<\/p>\n\n\n\n<p>Ki\u1ec3m tra s\u1ed1 l\u01b0\u1ee3ng ch\u1ec9 \u0111\u1ecbnh \u0111\u1ecbnh d\u1ea1ng v\u00e0 s\u1ed1 l\u01b0\u1ee3ng \u0111\u1ed1i s\u1ed1 truy\u1ec1n v\u00e0o c\u00f3 b\u1eb1ng nhau kh\u00f4ng.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-co-cach-nao-d\u1ecbnh-d\u1ea1ng-chu\u1ed7i-hi\u1ec7u-su\u1ea5t-cao-h\u01a1n-khong\"><strong>C\u00f3 c\u00e1ch n\u00e0o \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i hi\u1ec7u su\u1ea5t cao h\u01a1n kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Trong c\u00e1c t\u00ecnh hu\u1ed1ng c\u1ea7n x\u00e2y d\u1ef1ng chu\u1ed7i trong v\u00f2ng l\u1eb7p v\u1edbi hi\u1ec7u su\u1ea5t t\u1ed1i \u01b0u, b\u1ea1n n\u00ean \u01b0u ti\u00ean s\u1eed d\u1ee5ng:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>StringBuilder: \u0110\u1ec3 n\u1ed1i chu\u1ed7i hi\u1ec7u qu\u1ea3 h\u01a1n so v\u1edbi to\u00e1n t\u1eed <code>$`+`$<\/code>.<\/li>\n\n\n\n<li>StringJoiner (Java 8+): L\u00fd t\u01b0\u1edfng \u0111\u1ec3 x\u00e2y d\u1ef1ng chu\u1ed7i t\u1eeb m\u1ed9t b\u1ed9 s\u01b0u t\u1eadp (Collection) c\u00e1c ph\u1ea7n t\u1eed c\u00f3 d\u1ea5u ph\u00e2n c\u00e1ch (delimiter).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ V\u00ed d\u1ee5: D\u00f9ng StringJoiner\nStringJoiner sj = new StringJoiner(\", \");\nsj.add(\"Apple\").add(\"Banana\").add(\"Cherry\");\n\/\/ Output: \"Apple, Banana, Cherry\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-k\u1ebft\"><span class=\"ez-toc-section\" id=\"Tong_ket\"><\/span><strong>T\u1ed5ng k\u1ebft<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Vi\u1ec7c \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i l\u00e0 m\u1ed9t k\u1ef9 n\u0103ng n\u1ec1n t\u1ea3ng trong Java. T\u00f3m l\u1ea1i, b\u1ea1n n\u00ean ch\u1ecdn c\u00f4ng c\u1ee5 ph\u00f9 h\u1ee3p v\u1edbi m\u1ee5c \u0111\u00edch: s\u1eed d\u1ee5ng <code>String.format()<\/code> cho nhu c\u1ea7u \u0111\u1ecbnh d\u1ea1ng s\u1ed1 h\u1ecdc v\u00e0 chu\u1ed7i ch\u00ednh x\u00e1c; s\u1eed d\u1ee5ng Text Blocks \u0111\u1ec3 c\u1ea3i thi\u1ec7n kh\u1ea3 n\u0103ng \u0111\u1ecdc c\u1ee7a c\u00e1c khu\u00f4n m\u1eabu \u0111a d\u00f2ng (JSON\/HTML); v\u00e0 \u01b0u ti\u00ean <code>MessageFormat<\/code> khi x\u1eed l\u00fd b\u1ea3n \u0111\u1ecba h\u00f3a (l10n).<\/p>\n\n\n\n<p>N\u1eafm v\u1eefng c\u00e1c ph\u01b0\u01a1ng ph\u00e1p n\u00e0y kh\u00f4ng ch\u1ec9 gi\u00fap m\u00e3 c\u1ee7a b\u1ea1n chuy\u00ean nghi\u1ec7p h\u01a1n m\u00e0 c\u00f2n \u0111\u1ea3m b\u1ea3o d\u1eef li\u1ec7u \u0111\u1ea7u ra lu\u00f4n s\u1ea1ch s\u1ebd v\u00e0 c\u00f3 c\u1ea5u tr\u00fac.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Thay v\u00ec ph\u1ea3i chuy\u1ec3n \u0111\u1ed5i ki\u1ec3u d\u1eef li\u1ec7u v\u00e0 n\u1ed1i nhi\u1ec1u ph\u1ea7n l\u1ea1i v\u1edbi nhau, Java String Format cung c\u1ea5p m\u1ed9t c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u (type-safe), v\u00e0 d\u1ec5 \u0111\u1ecdc h\u01a1n \u0111\u1ec3 ch\u00e8n (insert) v\u00e0 \u0111i\u1ec1u ch\u1ec9nh c\u00e1ch hi\u1ec3n th\u1ecb (format) c\u00e1c gi\u00e1 tr\u1ecb v\u00e0o v\u1ecb tr\u00ed \u0111\u01b0\u1ee3c \u0111\u00e1nh [&hellip;]<\/p>\n","protected":false},"author":233,"featured_media":93964,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109,10350],"tags":[],"class_list":["post-93559","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it","category-java"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java - ITviec Blog<\/title>\n<meta name=\"description\" content=\"Hi\u1ec3u r\u00f5 Java String Format \u0111\u1ec3 vi\u1ebft c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u (type-safe), v\u00e0 d\u1ec5 \u0111\u1ecdc h\u01a1n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java\" \/>\n<meta property=\"og:description\" content=\"Thay v\u00ec ph\u1ea3i chuy\u1ec3n \u0111\u1ed5i ki\u1ec3u d\u1eef li\u1ec7u v\u00e0 n\u1ed1i nhi\u1ec1u ph\u1ea7n l\u1ea1i v\u1edbi nhau, Java String Format cung c\u1ea5p m\u1ed9t c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-30T15:55:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-31T02:51:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/12\/java-string-format-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"421\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nhat Anh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nhat Anh\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java - ITviec Blog","description":"Hi\u1ec3u r\u00f5 Java String Format \u0111\u1ec3 vi\u1ebft c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u (type-safe), v\u00e0 d\u1ec5 \u0111\u1ecdc h\u01a1n.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/","og_locale":"vi_VN","og_type":"article","og_title":"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java","og_description":"Thay v\u00ec ph\u1ea3i chuy\u1ec3n \u0111\u1ed5i ki\u1ec3u d\u1eef li\u1ec7u v\u00e0 n\u1ed1i nhi\u1ec1u ph\u1ea7n l\u1ea1i v\u1edbi nhau, Java String Format cung c\u1ea5p m\u1ed9t c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u","og_url":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2025-12-30T15:55:59+00:00","article_modified_time":"2025-12-31T02:51:34+00:00","og_image":[{"width":800,"height":421,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/12\/java-string-format-scaled.png","type":"image\/png"}],"author":"Nhat Anh","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Nhat Anh","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"15 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/"},"author":{"name":"Nhat Anh","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/149bc2a01a01f229e57b9cdf61f3ebd0"},"headline":"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java","datePublished":"2025-12-30T15:55:59+00:00","dateModified":"2025-12-31T02:51:34+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/"},"wordCount":3662,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/12\/java-string-format-scaled.png","articleSection":["Chuy\u00ean m\u00f4n IT","Java"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/","url":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/","name":"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/12\/java-string-format-scaled.png","datePublished":"2025-12-30T15:55:59+00:00","dateModified":"2025-12-31T02:51:34+00:00","description":"Hi\u1ec3u r\u00f5 Java String Format \u0111\u1ec3 vi\u1ebft c\u00fa ph\u00e1p g\u1ecdn g\u00e0ng, an to\u00e0n h\u01a1n v\u1ec1 ki\u1ec3u d\u1eef li\u1ec7u (type-safe), v\u00e0 d\u1ec5 \u0111\u1ecdc h\u01a1n.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/12\/java-string-format-scaled.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/12\/java-string-format-scaled.png","width":800,"height":421,"caption":"java string format - itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/huong-dan-java-string-format\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Java String Format: Kh\u00e1m ph\u00e1 c\u00f4ng c\u1ee5 \u0111\u1ecbnh d\u1ea1ng chu\u1ed7i trong Java"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/149bc2a01a01f229e57b9cdf61f3ebd0","name":"Nhat Anh","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/04\/pham-nhat-anh-vippro-196x200.jpeg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/04\/pham-nhat-anh-vippro-196x200.jpeg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/04\/pham-nhat-anh-vippro-196x200.jpeg","caption":"Nhat Anh"},"url":"https:\/\/itviec.com\/blog\/author\/nhat-anh\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/93559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/233"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=93559"}],"version-history":[{"count":5,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/93559\/revisions"}],"predecessor-version":[{"id":93987,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/93559\/revisions\/93987"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/93964"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=93559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=93559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=93559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}