2009-02-22 13 views
11

मेरे पास रेगेक्स के आसपास अपना सिर पाने का समय नहीं है और मुझे त्वरित उत्तर की आवश्यकता है। प्लेटफार्म जावा है।जावा रेगेक्स - स्ट्रिंग में रिक्त स्थान

मैं स्ट्रिंग

"Some text with spaces" 

जरूरत है ...

"Some text with spaces" 

यानी, 2 या अधिक लगातार रिक्त स्थान 1 अंतरिक्ष में परिवर्तित करने के लिए परिवर्तित किया।

+0

क्या आपका मतलब केवल रिक्त स्थान है, या आपका मतलब है "लगातार व्हाइटस्पेस वर्णों का कोई भी रन" (जिसमें टैब शामिल हो सकते हैं आदि)? –

उत्तर

47
String a = "Some text with spaces"; 
String b = a.replaceAll("\\s+", " "); 
assert b.equals("Some text with spaces"); 
+1

यह एक ही स्थान के साथ सभी एकल रिक्त स्थानों की प्रतिस्थापन करेगा, बहुत कुशल नहीं। आपको केवल दो या अधिक लगातार होने पर ही प्रतिस्थापित करना चाहिए। –

+4

@ क्रिस - समय से पहले रेगेक्स को अनुकूलित करना शुरू न करें, मेरा मानना ​​है कि यह पर्याप्त होगा। –

+5

हां, यह समाधान उतना कुशल नहीं है जितना हो सकता है, लेकिन इससे कोई फर्क नहीं पड़ता कि यह ऑपरेशन प्रदर्शन हॉटस्पॉट के अंदर हो रहा था। यह निश्चित रूप से एक डाउनवोट के लायक नहीं है। –

11

हम रिक्त स्थान के बारे में विशेष रूप से बात कर रहे हैं, तो आप रिक्ति के लिए विशेष रूप परीक्षण करना चाहते हैं:

MyString = MyString.replaceAll(" +", " "); 

का उपयोग \sसभी खाली स्थान के में परिणाम होगा प्रतिस्थापित किया जा रहा - कभी कभी, othertimes वांछित नहीं।

इसके अलावा, एक सरल तरीके से केवल 2 या अधिक मैच के लिए है:

MyString = MyString.replaceAll(" {2,}", " "); 

(। बेशक, इन उदाहरणों में से दोनों \s का उपयोग किसी भी खाली स्थान के एक भी अंतरिक्ष से बदलने की वांछित है, तो कर सकते हैं)

+0

यह याद रखने योग्य है कि आपको myString = myString.replaceAll ("+", "") जैसी कुछ चाहिए; अन्यथा यह कुछ भी उपयोगी नहीं होगा। –

+0

दरअसल - मुझे लगता है कि मैंने बस (अब हटाए गए) उत्तर के प्रारूप की प्रतिलिपि बनाई है, लेकिन इसे सही कर देगा। –

1

जावा (जावास्क्रिप्ट नहीं, php नहीं, नहीं anyother) के लिए:

txt.replaceAll("\\p{javaSpaceChar}{2,}"," ") 
-1

आप से बचने के लिए java.util.regex.Pattern की एक निरंतर उपयोग करने की आवश्यकता अभिव्यक्ति कंपाइल हर बार:

private static final Pattern REGEX_PATTERN = 
     Pattern.compile(" {2,}"); 

public static void main(String[] args) { 
    String input = "Some text with spaces"; 
    System.out.println(
     REGEX_PATTERN.matcher(input).replaceFirst(" ") 
    ); // prints "Some text with spaces" 
} 

एक और तरह से, Apache Commons Lang वर्ग StringUtils विधि normalizeSpace में शामिल हैं।

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