विभाजन का उपयोग करके पाइप प्रतीक द्वारा एक जावा स्ट्रिंग को विभाजित करना ("|")


195

जावा आधिकारिक दस्तावेज बताता है:

"boo:and:foo"उदाहरण के लिए, स्ट्रिंग इन अभिव्यक्तियों के साथ निम्नलिखित परिणाम देता है Regex Result:

{ "boo", "and", "foo" }"

और यही तरीका मुझे काम करने के लिए चाहिए। हालाँकि, अगर मैं इसे चलाता हूँ:

public static void main(String[] args){
        String test = "A|B|C||D";

        String[] result = test.split("|");

        for(String s : result){
            System.out.println(">"+s+"<");
        }
    }

यह प्रिंट करता है:

><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<

जो मुझे उम्मीद है उससे बहुत दूर है:

>A<
>B<
>C<
><
>D<

ये क्यों हो रहा है?


जवाबों:


423

आप की जरूरत है

test.split("\\|");

splitनियमित अभिव्यक्ति का उपयोग करता है और रेगेक्स | में ORऑपरेटर का प्रतिनिधित्व करने वाला एक मेटाचैकर है । आपको उस चरित्र का उपयोग करने से बचने की आवश्यकता है \(स्ट्रिंग में लिखा गया है "\\"क्योंकि \स्ट्रिंग स्ट्रिंग शाब्दिक में एक मेटाचैकर भी है और दूसरे \को भागने के लिए आवश्यक है)।

आप भी उपयोग कर सकते हैं

test.split(Pattern.quote("|"));

और Pattern.quoteरेगेक्स प्रतिनिधित्व के बच गए संस्करण का निर्माण करते हैं |


17
यह है, split()विधि regex लेता है और |रेग पूर्व के लिए विशेष चरित्र है
जिगर जोशी

1
स्टैक ओवरफ्लो पर मॉडरेटर के रूप में आप मेरी दूसरी पसंद हैं। शुभकामनाएं।
दिन ११

33

उचित भागने का उपयोग करें: string.split("\\|")

या, जावा 5+ में, Pattern.quote()इस प्रयोजन के लिए बनाए गए सहायक का उपयोग करें :

string.split(Pattern.quote("|"))

जो मनमाने इनपुट स्ट्रिंग्स के साथ काम करता है। बहुत उपयोगी है जब आपको उपयोगकर्ता इनपुट को उद्धृत / भागने की आवश्यकता होती है।


3
जब संक्रमण किया गया था, तो श्योर नहीं, लेकिन जावा 8 में, कोई भी उपयोग करेगा Pattern.quote()
RAnders00

4

इस कोड का उपयोग करें:

public static void main(String[] args) {
    String test = "A|B|C||D";

    String[] result = test.split("\\|");

    for (String s : result) {
        System.out.println(">" + s + "<");
    }
}

यह समाधान पहले से ही स्वीकृत उत्तर द्वारा इंगित किया गया है। इसे दोहराने की जरूरत नहीं है।
Pshemo

3

आप अपाचे पुस्तकालय का उपयोग भी कर सकते हैं और यह कर सकते हैं:

StringUtils.split(test, "|");

1

आप भी इस्तेमाल कर सकते हैं .split("[|]")

(मैंने इसके बजाय इसका इस्तेमाल किया .split("\\|"), जो मेरे लिए काम नहीं करता था।)


दोनों संस्करणों को ठीक काम करना चाहिए। अगर कोई यह नहीं बताता है कि समस्या कहीं और है।
सायनामो

@Phemo यह हालांकि एक दिलचस्प स्वाद जोड़ता है, कि कुछ आरक्षित प्रतीकों को कोष्ठक के अंदर रखने से बचना नहीं है।
पैक्स वोबिसकम

0
test.split("\\|",999);

एक सीमा या अधिकतम निर्दिष्ट करना उदाहरण के लिए सटीक होगा : "boo |||" a "या" || boo | " या "|||"

लेकिन test.split("\\|");एक ही उदाहरण के लिए अलग-अलग लंबाई के तार सरणियाँ लौटाएंगे।

संदर्भ का उपयोग करें: लिंक


-2

विभाजन () पद्धति एक तर्क के रूप में एक नियमित अभिव्यक्ति लेती है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.