এটি একটি খুব সাধারণ প্রশ্ন, তাই আমি এই উত্তরটিকেও একটি নিবন্ধে পরিণত করার সিদ্ধান্ত নিয়েছি ।
জাভা 13 এবং এর বাইরে
মাল্টলাইন স্ট্রিংস এখন টেক্সট ব্লকের মাধ্যমে জাভাতে সমর্থিত । জাভা 13 এবং 14 এ, এই বৈশিষ্ট্যটির জন্য ––enable–previewআপনার প্রকল্পটি তৈরি এবং পরিচালনা করার সময় বিকল্পটি সেট করা দরকার । পরীক্ষা করে দেখুন এই জাভা ডকুমেন্টেশন আরো বিস্তারিত জানার জন্য।
এখন, জাভা 13 এর আগে, আপনি কীভাবে এই প্রশ্নটি লিখবেন:
List<Tuple> posts = entityManager
.createNativeQuery(
"SELECT *\n" +
"FROM (\n" +
" SELECT *,\n" +
" dense_rank() OVER (\n" +
" ORDER BY \"p.created_on\", \"p.id\"\n" +
" ) rank\n" +
" FROM (\n" +
" SELECT p.id AS \"p.id\",\n" +
" p.created_on AS \"p.created_on\",\n" +
" p.title AS \"p.title\",\n" +
" pc.id as \"pc.id\",\n" +
" pc.created_on AS \"pc.created_on\",\n" +
" pc.review AS \"pc.review\",\n" +
" pc.post_id AS \"pc.post_id\"\n" +
" FROM post p\n" +
" LEFT JOIN post_comment pc ON p.id = pc.post_id\n" +
" WHERE p.title LIKE :titlePattern\n" +
" ORDER BY p.created_on\n" +
" ) p_pc\n" +
") p_pc_r\n" +
"WHERE p_pc_r.rank <= :rank\n",
Tuple.class)
.setParameter("titlePattern", "High-Performance Java Persistence %")
.setParameter("rank", 5)
.getResultList();
জাভা 13 টেক্সট ব্লককে ধন্যবাদ, আপনি নিম্নলিখিত হিসাবে এই কোয়েরিটি আবার লিখতে পারেন:
List<Tuple> posts = entityManager
.createNativeQuery("""
SELECT *
FROM (
SELECT *,
dense_rank() OVER (
ORDER BY "p.created_on", "p.id"
) rank
FROM (
SELECT p.id AS "p.id",
p.created_on AS "p.created_on",
p.title AS "p.title",
pc.id as "pc.id",
pc.created_on AS "pc.created_on",
pc.review AS "pc.review",
pc.post_id AS "pc.post_id"
FROM post p
LEFT JOIN post_comment pc ON p.id = pc.post_id
WHERE p.title LIKE :titlePattern
ORDER BY p.created_on
) p_pc
) p_pc_r
WHERE p_pc_r.rank <= :rank
""",
Tuple.class)
.setParameter("titlePattern", "High-Performance Java Persistence %")
.setParameter("rank", 5)
.getResultList();
আরও অনেক পাঠযোগ্য, তাই না?
আইডিই সমর্থন
ইন্টেলিজ আইডিইএ লেগ্যাসি Stringকনটেনটেশন ব্লকে নতুন মাল্টলাইন Stringফর্ম্যাটে রূপান্তর করার জন্য সহায়তা সরবরাহ করে:

জেএসএন, এইচটিএমএল, এক্সএমএল
মাল্টলাইন String সহায়ক যখন তাদেরকে JSON, এইচটিএমএল, অথবা XML লেখা হয়।
Stringএকটি JSON স্ট্রিং আক্ষরিক তৈরি করতে কনটেক্সটেশন ব্যবহার করে এই উদাহরণটি বিবেচনা করুন :
entityManager.persist(
new Book()
.setId(1L)
.setIsbn("978-9730228236")
.setProperties(
"{" +
" \"title\": \"High-Performance Java Persistence\"," +
" \"author\": \"Vlad Mihalcea\"," +
" \"publisher\": \"Amazon\"," +
" \"price\": 44.99," +
" \"reviews\": [" +
" {" +
" \"reviewer\": \"Cristiano\", " +
" \"review\": \"Excellent book to understand Java Persistence\", " +
" \"date\": \"2017-11-14\", " +
" \"rating\": 5" +
" }," +
" {" +
" \"reviewer\": \"T.W\", " +
" \"review\": \"The best JPA ORM book out there\", " +
" \"date\": \"2019-01-27\", " +
" \"rating\": 5" +
" }," +
" {" +
" \"reviewer\": \"Shaikh\", " +
" \"review\": \"The most informative book\", " +
" \"date\": \"2016-12-24\", " +
" \"rating\": 4" +
" }" +
" ]" +
"}"
)
);
পালানোর অক্ষর এবং ডাবল উদ্ধৃতি এবং অতিরিক্ত চিহ্নগুলির প্রাচুর্যের কারণে আপনি সবে JSON পড়তে পারেন।
জাভা টেক্সট ব্লক সহ, জেএসওএন অবজেক্টটি এভাবে লেখা যেতে পারে:
entityManager.persist(
new Book()
.setId(1L)
.setIsbn("978-9730228236")
.setProperties("""
{
"title": "High-Performance Java Persistence",
"author": "Vlad Mihalcea",
"publisher": "Amazon",
"price": 44.99,
"reviews": [
{
"reviewer": "Cristiano",
"review": "Excellent book to understand Java Persistence",
"date": "2017-11-14",
"rating": 5
},
{
"reviewer": "T.W",
"review": "The best JPA ORM book out there",
"date": "2019-01-27",
"rating": 5
},
{
"reviewer": "Shaikh",
"review": "The most informative book",
"date": "2016-12-24",
"rating": 4
}
]
}
"""
)
);
২০০৪ সালে আমি যখন সি # ব্যবহার করেছি তখন থেকেই আমি জাভাতে এই বৈশিষ্ট্যটি পেতে চাইছিলাম, এবং এখন অবশেষে এটি আমাদের কাছে রয়েছে।
string1 + string2আপনি যখন একটি নতুন স্ট্রিং অবজেক্ট বরাদ্দ করেন এবং ইনপুট স্ট্রিং দুটি থেকে অক্ষর অনুলিপি করেন। আপনি যদি স্ট্রিংগুলি একসাথে যুক্ত করে থাকেন তবে আপনি এন -1 বরাদ্দ এবং আনুমানিক (n ^ 2) / 2 অক্ষর অনুলিপি করছেন। অন্যদিকে স্ট্রিংবিল্ডার অনুলিপি করে অনুলিপি করে এবং পুনরায় পুনঃনির্ধারণ করে (যদিও আপনি এর অভ্যন্তরীণ বাফারের আকারকে ছাড়িয়ে গেলে এটি উভয় ক্ষেত্রেই হয়)। তাত্ত্বিকভাবে, এমন কেস রয়েছে যেখানে সংকলক স্ট্রিংবুডার ব্যবহার করতে রূপান্তর করতে পারে তবে বাস্তবে কে জানে।