regex

2012-06-15 14 views
21

का उपयोग कर अंतरिक्ष के साथ नई लाइन/वापसी को बदलें जो जानता है किसी के लिए बहुत ही बुनियादी सवाल।regex

बजाय से

"This is my text. 

And here is a new line" 

करने के लिए प्राप्त करने की

:

"This is my text. And here is a new line" 

मैं:

"This is my text.And here is a new line. 

किसी भी विचार क्यों?

L.replaceAll("[\\\t|\\\n|\\\r]","\\\s"); 

मुझे लगता है कि मुझे अपराधी मिला है।

अगली पंक्ति मैं निम्न कार्य पर:

L.replaceAll("[^a-zA-Z0-9|^!|^?|^.|^\\s]", ""); 

और ये मेरे समस्या का कारण बनने लगता है।

कोई विचार क्यों?

मैं स्पष्ट रूप से निम्नलिखित करने का प्रयास कर रहा हूं: सभी गैर-वर्णों को हटाएं, और सभी नई लाइनों को हटा दें।

+3

क्या आप बस 'एल.रेप्लेसएल (" [\\\ t | \\\ n | \\\ r] "," ");'? – benjer3

+0

मैंने कोशिश की और ऐसा लगता है कि यह काम नहीं करता है। –

+2

'L.replaceAll (" \\ s + "," ") '? –

उत्तर

44

\s रेगेक्स में व्हाइटस्पेस वर्णों के लिए एक शॉर्टकट है। स्ट्रिंग में इसका कोई मतलब नहीं है। ==> आप इसे अपने प्रतिस्थापन स्ट्रिंग में उपयोग नहीं कर सकते हैं। वहां आपको वास्तव में उस अक्षर को रखना होगा जिसे आप सम्मिलित करना चाहते हैं। यदि यह एक जगह है तो प्रतिस्थापन के रूप में " " का उपयोग करें।

दूसरी बात यह है कि आप 3 बैकस्लेश का उपयोग बचने के अनुक्रम के रूप में क्यों करते हैं? जावा में दो पर्याप्त हैं। और आपको एक चरित्र वर्ग में | (वैकल्पिक ऑपरेटर) की आवश्यकता नहीं है।

L.replaceAll("[\\t\\n\\r]+"," "); 

टिप्पणी

L नहीं बदला है। आप

String result =  L.replaceAll("[\\t\\n\\r]+"," "); 

टेस्ट कोड क्या करने की जरूरत आप एक परिणाम करना चाहते हैं:

String in = "This is my text.\n\nAnd here is a new line"; 
System.out.println(in); 

String out = in.replaceAll("[\\t\\n\\r]+"," "); 
System.out.println(out); 
+0

'एल.रेप्लेसएल (" [\\ टी | \\ एन | \\ आर] "," "); 'हालांकि काम नहीं करता है। –

+0

ने अभी भी यह कोशिश की है। कोई भाग्य नहीं। –

+1

आप चरित्र वर्ग के बाद '+' जोड़ना चाहते हैं, इसलिए आपको व्हाइटस्पेस वर्णों के प्रत्येक अनुक्रम के लिए केवल एक स्थान मिलता है। –

2

आपका regex अच्छा हालांकि मैं खाली स्ट्रिंग

String resultString = subjectString.replaceAll("[\t\n\r]", ""); 

आप उम्मीद के साथ बदलना होगा "पाठ" के बीच एक जगह और "और" सही?

मैं तो सब यहाँ अच्छी तरह से है जब मैं अपने नमूना

"This is my text. " 

को कॉपी करके regex की कोशिश है कि स्थान मिलता है। हो सकता है कि अगर आप इसे खाली स्ट्रिंग के साथ बदल दें तो यह काम करेगा। मुझे नहीं पता कि आप इसे क्यों बदलते हैं। और विकल्प | एक चरित्र वर्ग में आवश्यक नहीं है।

+0

मैं जेव नहीं कर रहा हूं लेकिन क्या यह वास्तव में \\ t जैसे अतिरिक्त बचने वाले पात्रों को रखना आवश्यक है? पर्याप्त नहीं है? – buckley

+0

आप अपने टेक्स्ट एडिटर के रूप में क्या उपयोग कर रहे हैं? –

+0

विंडोज़ पर अल्ट्राएडिट, इसलिए नई लाइन \ r \ n – buckley

7

प्रणाली एक linefeed या तो \r\n या सिर्फ \n है पर निर्भर करता है

L.replaceAll("(\\t|\\r?\\n)+", " "); 

की कोशिश करो।

+0

में विकल्प आवश्यक नहीं है यह गलत है। '? 'का मतलब एक चरित्र वर्ग में एक शाब्दिक प्रश्न चिह्न है (जैसा कि' | 'यहां भी एक शाब्दिक है)। और जावा के लिए भी चार बैकस्लाश ओवरकिल हैं। संपादित करें: लेकिन जवाब को दोबारा सुधारते समय अतिरिक्त बैकस्लैश न लेने के लिए @ आदर्श की गलती है :) –

+0

आप सही हैं। हालांकि paranthesis के साथ यह काम करना चाहिए। – Keppil

+0

ओह, क्षमा करें, मुझे इसका एहसास नहीं हुआ। खुशी है कि यह अभी तय है। – adarshr

3

मुझे this मिला।

String newString = string.replaceAll("\n", " "); 

हालांकि, जैसा कि आपके पास डबल लाइन है, आपको एक डबल स्पेस मिलेगा। मुझे लगता है कि आप एक दूसरे के साथ डबल रिक्त स्थान को प्रतिस्थापित करने के लिए सभी को बदल सकते हैं।

कि कोशिश कर काम नहीं करता है:

string.replaceAll(System.getProperty("line.separator"), " "); 

अगर मैं "स्ट्रिंग" में पंक्तियां बनाने के "\ n" का उपयोग करके मैं regex में उपयोग करने के लिए "\ n" था। अगर मैंने System.getProperty() का उपयोग किया था तो मुझे इसका उपयोग करना पड़ा।

-1

आप पहले विभाजन का उपयोग कर सकते हैं और सफेद स्थान का उपयोग करके इसे फिर से जोड़ सकते हैं। यह सुनिश्चित करेगा।

String[] Larray = L.split("[\\n]+"); 
L = ""; 
for(int i = 0; i<Larray.lengh; i++){ 
    L = L+" "+Larray[i]; 
} 

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