2013-09-07 3 views
14

में बचने वाले पात्रों के साथ डीलिमीटर को संभालना मैंने अपनी क्वेरी के लिए वेब खोजा है, लेकिन मुझे वह जवाब नहीं मिला जो मेरी आवश्यकता को ठीक से फिट करता है। मैं नीचे की तरह मेरे स्ट्रिंग है:जावा स्ट्रिंग.split() विधि

A|B|C|The Steading\|Keir Allan\|Braco|E 

मेरे आउटपुट नीचे तरह दिखना चाहिए:

A 
B 
C 
The Steading|Keir Allan|Braco 
E 

मेरे आवश्यकता सीमांकक को छोड़ने के लिए अगर यह एस्केप अनुक्रम से पहले किया जाता है। मैं String.split() में नकारात्मक lookbehinds निम्नलिखित का उपयोग कर की कोशिश की है:

(?<!\\)\| 

लेकिन, मेरी समस्या सीमांकक गतिशील अंत उपयोगकर्ता द्वारा परिभाषित किया जाएगा और यह हमेशा | होने की जरूरत नहीं है। यह कीबोर्ड पर कोई चरित्र नहीं हो सकता है (कोई प्रतिबंध नहीं)। इसलिए, मेरा संदेह यह है कि उपरोक्त रेगेक्स कुछ विशेष पात्रों के लिए असफल हो सकता है जिन्हें रेगेक्स में अनुमति नहीं है।

मैं सिर्फ यह जानना चाहता था कि यह करने का यह सही तरीका है या नहीं।

उत्तर

24

आप Pattern.quote() उपयोग कर सकते हैं:

String delim = "|"; 
String regex = "(?<!\\\\)" + Pattern.quote(delim); 

for (String s : "A|B|C|The Steading\\|Keir Allan\\|Braco|E".split(regex)) 
    System.out.println(s); 
 
A 
B 
C 
The Steading\|Keir Allan\|Braco 
E 

आप इस विस्तार कर सकते हैं और साथ ही एक कस्टम एस्केप अनुक्रम का उपयोग करने के:

String regex = "(?<!\\\\)" + Pattern.quote(delim); 

अपने उदाहरण का उपयोग

String delim = "|"; 
String esc = "+"; 
String regex = "(?<!" + Pattern.quote(esc) + ")" + Pattern.quote(delim); 

for (String s : "A|B|C|The Steading+|Keir Allan+|Braco|E".split(regex)) 
    System.out.println(s); 
 
A 
B 
C 
The Steading+|Keir Allan+|Braco 
E 
+0

शीघ्र प्रतिक्रिया के लिए धन्यवाद। लेकिन, मैं जानना चाहूंगा कि रेगेक्स में सभी विशेष पात्रों की अनुमति है या नहीं। इस के लिए कोई अपवाद? – user2757740

+0

@ user2757740 'Pattern.quote()' के लिंक किए गए दस्तावेज़ पढ़ें; यह एक स्ट्रिंग लेता है और सभी विशेष पात्रों से बच निकलता है। कोई अपवाद नहीं है। – arshajii

+0

जिसने मेरे अधिकांश प्रश्नों को हल किया। बहुत बहुत धन्यवाद .. लेकिन, मैं अपने बचने के अनुक्रम के लिए उसी पैटर्न.क्वोट() को भी लागू करना चाहता था। लेकिन, मुझे डर है कि यह काम नहीं कर रहा है :((? user2757740

संबंधित मुद्दे