জাভাতে, কোটগুলি এড়ানো ছাড়া স্ট্রিং আক্ষরিক লেখার কোনও উপায় আছে কি?


111

বলুন আপনার অভ্যন্তরে প্রচুর উদ্ধৃতি চিহ্ন সহ একটি স্ট্রিং আক্ষরিক রয়েছে। আপনি এই সমস্ত এড়াতে পারে, কিন্তু এটি একটি ব্যথা এবং পড়া কঠিন।

কিছু ভাষায়, আপনি কেবল এটি করতে পারেন:

foo = '"Hello, World"';

জাভাতে তবে এস এর ''জন্য ব্যবহৃত হয় char, সুতরাং আপনি এটি এর জন্য ব্যবহার করতে পারবেন না String। কিছু ভাষা এর চারপাশে কাজ করতে সিনট্যাক্স আছে। উদাহরণস্বরূপ, পাইথনে, আপনি এটি করতে পারেন:

"""A pretty "convenient" string"""

জাভা কি কিছু অনুরূপ আছে?



এই উত্তরটি দেখায় যে কীভাবে একলিসপে মাল্টি-লাইন অব্যাহত স্ট্রিং পেস্ট করা যায়।
জেফ এক্সেলরড

2
আপডেট 2018: জাভার জন্য কাঁচা স্ট্রিং লিটারেল আসতে পারে। আমার উত্তর নীচে দেখুন
ভোনসি

তারপরে জ্যাকসন অবজেক্টম্যাপার আমদানি করুন System.out.println(mapperObj.writeValueAsString(mapperObj.readValue(str, Object.class)));
Kervvv

আপডেট Q4 2018: কাঁচা স্ট্রিং আক্ষরিক এখনও আসছে না । আমার আপডেট হওয়া উত্তরটি দেখুন
ভনসি

উত্তর:


74

উত্তরটি হ'ল না, এবং তার প্রমাণটি জাভা ভাষার নির্দিষ্টকরণে রয়েছে :

  StringLiteral:
   "StringCharacters"

  StringCharacters:
   StringCharacter
   | StringCharacters StringCharacter

  StringCharacter:
   InputCharacter but not " or \
   | EscapeSequence

যেমন আপনি দেখতে পাচ্ছেন একটি StringLiteralকেবল আবদ্ধ হতে পারে "এবং পলায়ন ছাড়া বিশেষ অক্ষর থাকতে পারে না ..

একটি সাইড নোট: আপনি এম্বেড করতে পারেন খাঁজকাটা আপনার প্রকল্পের ভিতরে, তাহলে এটি আপনাকে ব্যবহার করার অনুমতি দেয় জাভার বাক্য গঠন বাড়িয়ে দেবে '''multi line string ''', ' "string with single quotes" 'এবং "string with ${variable}"


141

না, এবং আমি সর্বদা জাভাতে বিভিন্ন স্ট্রিং-আক্ষরিক সিনট্যাক্সের অভাবে বিরক্ত হয়েছি।

এখানে সময়ে সময়ে আমি একটি কৌশল ব্যবহার করেছি:

String myString = "using `backticks` instead of quotes".replace('`', '"');

আমি সাধারণত একটি স্থির ক্ষেত্রের জন্য এমন কিছু করি do যেহেতু এটি স্ট্যাটিক স্ট্রিং-রিপ্লেস কোডটি একবার ক্লাস শুরু করার পরে কল করা হয়। সুতরাং রানটাইম পারফরম্যান্স পেনাল্টি কার্যত অস্তিত্বহীন, এবং এটি কোডটিকে আরও সুগঠিত করে তোলে।


আপনার কি সমস্ত প্রতিস্থাপন ব্যবহার করার দরকার নেই?
ল্যান্ডন কুহন

10
টুইট .replaceAll রিজেক্স ব্যবহার করে।
অ্যাবলিটো

কৌতূহলের বাইরে আপনি কি জানেন যে সংকলনের সময় জাভা সংকলক এটি সরল করে দেবে?
ug_

2
না, আমি মনে করি না যে সংকলকটি এটিকে সহজ করবে। তবে এটা আসলে কিছু যায় আসে না। এটি একটি খুব সাশ্রয়ী কল এবং আমি যদি কেবল স্থিতিশীল চূড়ান্ত স্ট্রিংয়ের জন্য এটি করি তবে ক্লাসলোডিংয়ের পরে একবারে ব্যয় হবে। এটি এমন একটি দাম যা আমি সাধারণত ভাল
লাগার কোডটির

3
তাহলে মাইস্ট্রিংয়ের "\" সম্পর্কে কী?
অ্যান্ডারসন

10

আপডেট ডিসেম্বর 2018 (12 মাস পরে):

কাঁচা স্ট্রিং লিটারেলগুলি (যা অ্যাম্বার তালিকায় রয়েছে ) এটি জেডিকে ১২-এ তৈরি করবে না এখানে সমালোচনাগুলি
দেখুন ।


জাভা (10 বা ততোধিক) এর ভবিষ্যতের সংস্করণে থাকতে পারে।

জানুয়ারী 2018 থেকে জেপিএস 8196004 দেখুন : ( "জেপি" হ'ল " জেডিকে এনহান্সমেন্ট প্রোগ্রাম" )

জেপি খসড়া: কাঁচা স্ট্রিং লিটারালস

জাভা প্রোগ্রামিং ভাষায় একটি নতুন ধরণের আক্ষরিক, একটি কাঁচা স্ট্রিং আক্ষরিক যোগ করুন।
চিরাচরিত স্ট্রিং আক্ষরিকের মতো, একটি কাঁচা স্ট্রিং আক্ষরিক একটি স্ট্রিং উত্পাদন করে তবে স্ট্রিং পলায়নের ব্যাখ্যা দেয় না এবং উত্স কোডের একাধিক লাইন বিস্তৃত করতে পারে

এর পরিবর্তে:

Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar");
String html = "<html>\n"
              "    <body>\n" +
              "         <p>Hello World.</p>\n" +
              "    </body>\n" +
              "</html>\n";
System.out.println("this".matches("\\w\\w\\w\\w"));

আপনি টাইপ করতে সক্ষম হবেন:

Runtime.getRuntime().exec(`"C:\Program Files\foo" bar"`);
    
String html = `<html>
                   <body>
                       <p>Hello World.</p>
                   </body>
               </html>
              `;

System.out.println("this".matches(`\w\w\w\w`));

ঝরঝরে!

কিন্তু এখনও আছে একটি খসড়া মাত্র : এটি সম্পন্ন করার পরে এটি পরবর্তী জেডিকে তৈরি করার আগে পোস্ট করা, জমা দেওয়া, প্রার্থী হওয়া এবং অর্থায়ন করা দরকার।


5

সহজ উত্তর: না

দীর্ঘতর স্ট্রিংগুলির জন্য যেগুলি অবশ্যই পালাতে হবে, আমি সাধারণত সেগুলি কোনও বাহ্যিক উত্স থেকে পড়ি।


4

আপনি অ্যাপাচি কমন্স থেকে স্ট্রিংএকস্কিট ব্যবহার করতে পারেন

আপডেট : কেউ যদি এখানে কয়েকটি উদাহরণে আগ্রহী হয় তবে এটি একটি দরকারী লিঙ্ক: https://dzone.com/articles/commons-lang-3- উন্নত- এবং- পাওয়ারফুল- স্ট্রিংএইস্কুল ইউটিلز


2
আপনি কীভাবে এই সমস্যার জন্য এটি চিত্রিত করে সেই প্রশ্নের ভিত্তিতে একটি উদাহরণ যুক্ত করতে পারেন?
বেংট

3
এটি কেবলমাত্র অন্য একটি উত্সকে প্রশ্নের উত্তর দিতে পারে তবে এটি সাবওস্টিমাল হিসাবে বিবেচিত হয়। প্রশ্নের সাথে মিলে যাওয়া উদাহরণের সাথে লিঙ্কযুক্ত পৃষ্ঠাটির সংক্ষিপ্তসারটি বিবেচনা করুন।
বেংট

আমি একবার দেখেছি এবং মনে হয় না হয় সত্যই প্রশ্নের উত্তর দেয়। স্ট্যাটিক পদ্ধতিগুলির ইনপুটগুলি Stringহ'ল আপনার কোডটিতে একটি সুন্দর বিন্যাসিত মান রাখার কোনও উপায় নেই। সম্ভবত আপনি এই পদ্ধতিগুলি কোনও ফাইল থেকে একটিতে পড়তে ব্যবহার করতে পারেন Stringতবে আমি মনে করি না এখানেই প্রশ্ন question
টম হ্যারিসন

সংযুক্ত শ্রেণি (org.apache.commons.lang3.StringEcreenUtils) অবমূল্যায়িত এবং org.apache.commons.text.StringEcreenUtils
jcarter

-4

নিম্নলিখিতটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে:

String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";

আমি মনে করি কারণ চরটি স্ট্রিংয়ের জন্য আদিম পরিবর্তনশীল প্রকার, স্ট্রিংস এবং চরগুলি একত্রিত করা যেতে পারে (কমপক্ষে গ্রহগ্রন্থের সংকলকটি অভিযোগ করে বলে মনে হয় না)।


1
আমি মনে করি কারণ চরটি স্ট্রিংয়ের জন্য আদিম পরিবর্তনশীল প্রকার <- আপনার অনুমানটি ভুল। এই বিষয়টির জন্য এটি কোনও আলাদা টাইপের সাথেও কাজ করবে যেমন একটি ইন্টের মতো: স্ট্রিং x = "কিছু পাঠ্য" + 33 + "আরও পাঠ্য";
নাজিব

-6

আপনি যদি পালাতে 'বা "আপনার স্ট্রিংয়ে যেতে চান তবে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

String text = ...

text = text.replaceAll("('|\")", "\\\\$1");

উত্স কোডে স্ট্রিং লিটারাল সম্পর্কে প্রশ্ন জিজ্ঞাসা করা হয়েছিল। দুঃখিত আবার চেষ্টা করুন.
michaelb958 - GoFundMonica
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.