জাভা 13 টেক্সট ব্লক * * নতুন লাইন ছাড়া


12

"""ডেলিমিটারগুলির সাথে জাভা 13 মাল্টি লাইনের পাঠ্য ব্লক সুবিধাটি সুপরিচিত হয়ে উঠছে।

তবে আমার একটি পুনরাবৃত্তি প্রয়োজন যেখানে এম্বেড করা নতুনলাইনগুলি ছাড়া আমার পুরো অনুচ্ছেদগুলি দরকার।

অন্য কথায়, নিম্নলিখিত কোড স্নিপেট:

String paragraph =
    """
    aaaa bbbb cccc
    dddd eeee ffff
    gggg hhhh iiii
    """"
System.out.println(paragraph);

নিম্নলিখিতটি উত্পাদন করে, যেমনটি আপনি আশা করেছিলেন:

aaaa bbbb cccc
dddd eeee ffff
gggg hhhh iiii

... যা সাধারণত প্রচুর উপকারী। তবে আমার ক্ষেত্রে, বিশেষত বড় অনুচ্ছেদের জন্য এটি তৈরি করতে আমার এটি প্রয়োজন:

aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii

(.... এবং পরে পাঠ্য প্রবাহের সাথে ডিল করুন))

ট্রিপল-কোটের বৈশিষ্ট্যটির জন্য কোনও "নো-নিউলাইন" প্যারামিটার স্থাপনের কোনও উপায় আছে কি?


কল্পনা করুন যে কোনও বৃহত পরিমাণে এমন পাঠ্য যা আপনাকে এইচটিএমএল ডকুমেন্টের অংশ হতে হবে বা একইভাবে একটি পুনরায় আকার পরিবর্তনযোগ্য ডায়ালগ বাক্সে প্রবাহিত করতে হবে। আমি তথ্য অনেক "লাইন" মূল্য মধ্যে প্রবেশ করতে চান ছাড়া"line" + "line" + "line" ইত্যাদি, এবং EOL এর দেখানো ছাড়াই। যেমন ভোঁতা এবং বজায় রাখা কঠিন সিনট্যাক্স এড়ানো সম্পূর্ণরূপে বিন্দু পেছনে """
আলি

উত্তর:


16

এই বৈশিষ্ট্যটির ডিজাইনাররাও এই প্রয়োজনীয়তাটি উপলব্ধি করতে পেরেছিলেন ( JEP368 এ 'নতুন পালানোর সিকোয়েন্সগুলি' দেখুন)। সুতরাং, JDK 14 এর সর্বশেষতম অ্যাক্সেস বিল্ডের সাহায্যে আপনি \একটি লাইনের শেষে নতুন লাইনটি এড়াতে ট্রেলিং ব্যবহার করতে পারেন :

public class Main {
    public static void main(String[] args) {
        String paragraph =
            """
            aaaa bbbb cccc \
            dddd eeee ffff \
            gggg hhhh iiii \
            """;
        System.out.println(paragraph);
    }
}

ছাপে:

aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii

14, হাহ? আমি অবাক হয়েছি কীভাবে ইনডেন্টিংয়ের সংমিশ্রণটি কাজ করবে, বা যদি সমস্ত সাদা স্থান পরিষ্কার করা হয়?
আলিফ

তবে তার জন্য বিদ্যমান স্ট্রিং ইনপুটটি সংশোধন করা দরকার যা কেবলমাত্র সেই ক্ষেত্রে সরাসরি নতুন লাইনে সরাতে যথেষ্ট উপযুক্ত।
নমন

3
হুম, প্রথমে তারা হয় এম্বেড আক্ষরিক টেক্সট হিসাবে সক্ষম হচ্ছে বলে ধরনের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল যে এটি ভাষা পরিবর্তনগুলি যথার্থ, তবুও এটিকে এখন তাদের নিজের উপর পালাবার ক্রম পায়, আর আমি অবাক করতে হবে, কি সুবিধা নির্বাণ শেষ "aaaa bbbb cccc ", +"dddd eeee ffff "এবং +"gggg hhhh iiii ", প্রতিটি একটি স্বতন্ত্র লাইনে…
হলগার

@ হোলার বৈশিষ্ট্যটি 2 এ বিভক্ত হয়েছে; পাঠ্য ব্লক (ওরফে মাল্টি-লাইন স্ট্রিং), এবং কাঁচা স্ট্রিং লিটারেল (যেমন-স্ট্রিং, যা টিবিডি)। এই ঠিক প্রাক্তন। নোট করুন যে অন্যান্য পালানো যেমন \nটেক্সট ব্লকে এখনও কাজ করে।
জর্ন ভের্নি

1
তবে এখন যে আমাদের রয়েছে readString, এম্বেড থাকা সংস্থানগুলিও পরিচালনা করা খুব সহজ easier আমি কখনই উত্স কোডে পুরো অনুচ্ছেদগুলিকে একীভূত করতে চাইনি, কেবলমাত্র I / O স্টাফ বিরক্তিকর ছিল।
হলগার

4

আপনি String.linesজাভা -11 সাল থেকে চালু হিসাবে ব্যবহার করতে পারেন :

String output = paragraph.lines().collect(Collectors.joining());

একটি প্রশংসাসূচক এবং এটির জন্য মূল্যবান, এখানে দুটি ভিন্ন ব্লকের কোডের জে শেল কার্যকরকরণের একটি স্ক্রিনশট রয়েছে:

এখানে চিত্র বর্ণনা লিখুন


3
… যা এর মতোই করেString output = paragraph.replaceAll("[\n\r]", "");
হলগার

এবং সমাধান অ (যতক্ষণ না যার ফলে এর JDK-14 এর পরিমার্জন \sমধ্যে """ব্লক) আমাকে লাইন যেখানে আমি আসলে কঠিন রিটার্ন (যেমন অনুচ্ছেদ মধ্যে যেমন, ইত্যাদি) চাও সঙ্গে EOL-কম লাইন মিশিয়ে করার অনুমতি দেয়
Alife

1

প্রকৃতপক্ষে, জাভা 13 এ একটি ভাল উত্তর খুঁজে পাওয়া সহজ নয় (সম্ভবত অসম্ভবও অসম্ভব) তবে আমি মনে করি জর্ন ভার্নি তার উত্তরে মনোযোগ দিয়ে উদ্বেগকে সম্বোধন করেছেন (জাভা 14-এ নতুন পালানোর ক্রমগুলি একটি গ্রহণযোগ্য সমাধান প্রদান করে)।

কয়েকটি তালিকাভুক্ত উদ্বেগকে প্রসারিত করতে:

  • হোলার উল্লেখ করেছেন "'পাঠ্য ব্লকগুলি' বৈশিষ্ট্যটি খুব বিশ্বাসযোগ্য নয়"। আমি প্রচুর "কুরুচিপূর্ণ" কোড দেখেছি যা কৃত্রিম স্ট্রিং সংমিশ্রণটি করে, তাই আমি মনে করি বৈশিষ্ট্যটি অবশ্যই কোনও সমস্যার সমাধান করে । অন্যদিকে, আমাকে সম্মত হতে হবে যে এর মতো কোনও বৈশিষ্ট্য অপব্যবহারের জন্য প্রচুর জায়গা ফেলেছে (যেমন "আসুন জাভা কোডটিতে অনেকগুলি পাঠ্য রাখি কারণ এখন আমরা সুন্দরভাবে এটি করতে পারি!" - পরের বিষয়টি দেখুন )।
  • মূল প্রশ্নটিতে "বৃহত্তর অনুচ্ছেদগুলি" উল্লেখ করা হয়েছে যা আমাকে এই বৈশিষ্ট্যটি মোটেও ব্যবহার না করার পরামর্শ দেয়, তবে সেই সামগ্রীটি ফাইলগুলি সংস্থান করতে বহিরাগত করে।
  • স্পষ্টতা এবং সেই নির্দিষ্ট দিকগুলি সম্পর্কে "পাঠকের কাছে স্পষ্ট নয়, সুতরাং আমাদের কাছে একটি স্পষ্ট-অর্থহীন অর্থ সহ একটি বাক্য গঠন রয়েছে"। এটি আংশিকভাবে সঠিক, এবং উপলব্ধ পঠনগুলি এই মুহুর্তে এত বিশাল নয় তবে এটি কিছু পড়া এবং পরীক্ষা নিরীক্ষা করে। আমি এটি পেয়েছি: প্রোগ্রামারদের গাইড টু টেক্সট ব্লক , যা বেশ কয়েকটি উদাহরণ সরবরাহ করে। আমি কয়েকটি উদাহরণও রচনা করেছি, এখানে পাঠ্য ব্লকগুলির একটি: টেক্সটব্লকস.জভা - আশা করি সেগুলি সহায়তা করবে।

মডারেটরের জন্য নোট: আমি জানি যে এই উত্তরটি সম্ভাব্যভাবে গাইডলাইনটি লঙ্ঘন করেছে (আমি প্রশ্নের উত্তর দিচ্ছি না এবং আমি অন্যান্য ব্যবহারকারীর মন্তব্যে জবাব দিয়েছি) তবে আমি মনে করি যে বিষয়গুলি এখনও চলছে যা চলছে তাতে বিতর্কের অবকাশ থাকা উচিত should (আসুন ভুলে যাবেন না যে পাঠ্য ব্লকগুলি 'দ্বিতীয় পূর্বরূপ' মোডে রয়েছে )।


0

paragraph.replaceAll("\\n","") আপনার জন্য কাজ করা উচিত।


লাইনের শেষে আমার অব্যাহতি অক্ষর ব্যবহার করায় ইন্টেলিজ এখন একধরনের ক্রাশ লুপের মধ্যে রয়েছে। সম্ভবত যা ভাল হবে """ line line line """.replaceAll("\\n",""); তা এখনই তা যাচাই করা যায় না।
আলিফ

আমি মনে করি এটির (গৌণ) সমস্যাটিও আছে যে এটি রানটাইম সময়ে পরিচালনা করা হয় এবং সংকলন-সময় নয়, তবে এটি আমার উদ্দেশ্যগুলির জন্য প্রয়োজনীয়তা নয়।
আলিফাত

এই সমাধানটি \sJDK-14 এর সক্ষমতা পর্যন্ত পৌঁছতে পারে না । আমি যদি লাইন ব্রেক ব্যতীত বেশ কয়েকটি অনুচ্ছেদ চাই তবে তাদের মধ্যে লাইন বিচ্ছেদ ঘটে।
আলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.