जावा 13 टेक्स्ट ब्लॉक * बिना * newlines


12

"""सीमांकक के साथ जावा 13 मल्टी लाइन टेक्स्ट ब्लॉक सुविधा अच्छी तरह से ज्ञात हो रही है।

हालाँकि मुझे एक आवर्ती आवश्यकता है जहां मुझे एम्बेडेड newlines के बिना पूरे पैराग्राफ की आवश्यकता है।

दूसरे शब्दों में, निम्नलिखित कोड स्निपेट:

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

(.... और बाद में पाठ प्रवाह के साथ सौदा।)

क्या ट्रिपल-उद्धरण सुविधा के लिए "नो-न्यूलाइन" पैरामीटर स्थापित करने का कोई तरीका है?


एक बड़ी मात्रा में पाठ में प्रवेश करने की कल्पना करें जो बाद में एक HTML दस्तावेज़ का हिस्सा हो, या इसी तरह एक रिसॉल्विंग डायलॉग बॉक्स में प्रवाहित हो। मैं डेटा के कई "लाइनों" लायक में दर्ज करना चाहते हैं के बिना"line" + "line" + "line" आदि, और EOL के दिखा के बिना। वाक्य रचना को बनाए रखने के लिए इस तरह के विरोध और मुश्किल से बचना पूरी तरह से पीछे की बात है """
अलाइफ

जवाबों:


16

इस सुविधा के डिजाइनरों ने इस आवश्यकता को महसूस किया ( जेईपी 368 में 'न्यू एस्केप सीक्वेंस' देखें)। तो, 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 में विभाजित किया गया है; पाठ ब्लॉक (उर्फ मल्टी-लाइन स्ट्रिंग्स), और कच्चे स्ट्रिंग शाब्दिक (जैसे-स्ट्रिंग है, जो tbd है)। यह सिर्फ पूर्व है। ध्यान दें कि अन्य भाग, जैसे \n, अभी भी पाठ ब्लॉकों में काम करते हैं।
जॉर्न वर्नी

1
लेकिन अब हमारे पास readStringएम्बेडेड संसाधन भी संभालना बहुत आसान है। मैं कभी भी पूरे पैराग्राफ को सोर्स कोड में एकीकृत नहीं करना चाहता था, केवल I / O सामान कष्टप्रद था।
होल्गर

4

String.linesजावा -11 के बाद से आप इसका उपयोग कर सकते हैं :

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

एक मानार्थ और इसके लायक क्या है, यहां कोड के दो अलग-अलग ब्लॉकों के जेएसहेल निष्पादन से एक स्क्रीनशॉट है:

यहां छवि विवरण दर्ज करें


3
... जो वैसा ही करता हैString output = paragraph.replaceAll("[\n\r]", "");
Holger

और समाधान के गैर (जब तक JDK-14 ब्लॉक \sमें अनुमति देने के संशोधन """) मुझे लाइनों के साथ ईओएलएम-कम लाइनों को रोकने की अनुमति देता है जहां मैं वास्तव में हार्ड रिटर्न (जैसे पैराग्राफ, आदि के बीच)
चाहता हूं

1

वास्तव में, जावा 13 में एक अच्छा जवाब खोजना आसान नहीं है (शायद असंभव भी) लेकिन मुझे लगता है कि जोर्न वर्नी ने अपने उत्तर में चिंताजनक रूप से चिंता व्यक्त की (जावा 14 में नए भागने के क्रम एक स्वीकार्य समाधान प्रदान करते हैं)।

कई सूचीबद्ध चिंताओं पर विस्तार करने के लिए:

  • होल्गर का उल्लेख है "पाठ ब्लॉक 'सुविधा बहुत आश्वस्त नहीं है"। मैंने बहुत सारे "बदसूरत" कोड देखे हैं जो कृत्रिम स्ट्रिंग संयोजन करता है, इसलिए मुझे लगता है कि सुविधा निश्चित रूप से एक मुद्दे को संबोधित करती है । दूसरी तरफ, मुझे इस बात से सहमत होना होगा कि इस तरह की सुविधा दुरुपयोग के लिए बहुत जगह छोड़ती है (जैसा कि "जावा कोड में बहुत सारे पाठ डालते हैं क्योंकि अब हम इसे अच्छी तरह से कर सकते हैं!" - अगला बिंदु देखें )।
  • मूल प्रश्न में "बड़े पैराग्राफ" का उल्लेख है जो मुझे इस सुविधा का उपयोग न करने की सलाह देते हैं, लेकिन उस सामग्री को संसाधन फ़ाइलों में बाह्य करते हैं।
  • स्पष्टता और उस कुछ पहलुओं के बारे में "पाठक के लिए स्पष्ट नहीं है, इसलिए हमारे पास एक गैर-स्पष्ट अर्थ के साथ एक वाक्यविन्यास है"। यह आंशिक रूप से सही है, और यह कुछ पढ़ने और प्रयोग करता है, जबकि उपलब्ध सामग्री इस समय इतनी विशाल नहीं है। मुझे यह मिला: प्रोग्रामर की गाइड टू टेक्स्ट ब्लॉक्स , जो बहुत सारे उदाहरण प्रदान करता है। मैंने कुछ उदाहरणों को भी लिखा है, पाठ खंडों में से एक यहाँ: TextBlocks.java - उम्मीद है कि वे मदद करेंगे।

मॉडरेटर के लिए ध्यान दें: मुझे पता है कि यह उत्तर संभावित रूप से दिशानिर्देश का उल्लंघन करता है (मैं प्रश्न को संबोधित नहीं करता हूं और मैं अन्य उपयोगकर्ताओं की टिप्पणियों का जवाब देता हूं), लेकिन मुझे लगता है कि उन विषयों के लिए बहस के लिए जगह होनी चाहिए जो अभी भी प्रगति पर हैं। (चलिए यह नहीं भूलना चाहिए कि टेक्स्ट ब्लॉक 'दूसरे पूर्वावलोकन' मोड में हैं )।


0

paragraph.replaceAll("\\n","") आप के लिए काम करना चाहिए।


लाइन के अंत में भागने के पात्रों के मेरे उपयोग के कारण इंटेलीज अब किसी प्रकार के दुर्घटनाग्रस्त लूप में है। शायद जो सबसे अच्छा होगा """ line line line """.replaceAll("\\n",""); वह अभी इसे सत्यापित नहीं कर सकता है।
अलाइफ़

मुझे लगता है कि वहाँ भी (मामूली) मुद्दा है कि यह रनटाइम पर संभाला जाता है और संकलन-समय नहीं है, लेकिन यह मेरे उद्देश्यों के लिए एक आवश्यकता नहीं है।
अलीफ डेस

यह समाधान भी \sJDK-14 की क्षमता तक नहीं पहुंच सकता है । क्या होगा अगर मैं बिना लाइन ब्रेक के कई पैराग्राफ चाहता हूं, लेकिन उनके बीच में लाइन टूट जाती है।
अलाइफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.