2013-03-06 18 views
9

पर नहीं हैं, मैं जावा कोड लिखने की कोशिश कर रहा हूं जो सभी अवांछित पात्रों को हटा देगा और केवल श्वेतसूची वाले लोगों को छोड़ देगा।स्ट्रिंग से सभी वर्ण हटाएं जो श्वेतसूची

उदाहरण:

String[] whitelist = {"a", "b", "c"..."z", "0"..."9", "[", "]",...} 

मैं वहाँ चाहते केवल अक्षरों (कम और अपरकेस) और नंबर + कुछ अगले वर्ण मैं जोड़ना होगा। फिर मैं स्ट्रिंग में प्रत्येक वर्ण के लिए for() चक्र शुरू करूंगा, और इसे श्वेतसूची पर नहीं होने पर इसे खाली स्ट्रिंग के साथ प्रतिस्थापित कर दूंगा।

लेकिन यह अच्छा समाधान नहीं है। शायद यह पैटर्न (regex) का उपयोग कर किसी भी तरह किया जा सकता है? धन्यवाद।

String input = "BAD good {} []"; 
String output = input.replaceAll("[^a-z0-9\\[\\]]", ""); 
System.out.println(output); // good[] 

या Guava में आप एक CharMatcher इस्तेमाल कर सकते हैं:

CharMatcher matcher = CharMatcher.inRange('a', 'z') 
          .or(CharMatcher.inRange('0', '9')) 
          .or(CharMatcher.anyOf("[]")); 
String input = "BAD good {} []"; 
String output = matcher.retainFrom(input); 

कि सिर्फ छोटे अक्षर संस्करण से पता चलता है, यह भी आसान हो जाता

+1

'शायद यह किसी भी तरह पैटर्न (regex) का उपयोग किया जा सकता है' हां, तुम सही हो । आप [यहां] शुरू कर सकते हैं (http://www.regexplanet.com/advanced/java/index.html) – ppeterka

+0

किस प्रकार के पात्रों की अनुमति है? आवश्यकता के आधार पर, रेगेक्स काफी अलग हो सकता है। – nhahtdh

उत्तर

21

हाँ, आप String.replaceAll जो एक regex लेता उपयोग कर सकते हैं का प्रदर्शन। ऊपरी केस अक्षरों को शामिल करने के लिए, रेगेक्स (और आपके इच्छित किसी अन्य प्रतीक) में "[^A-Za-z0-9\\[\\]]" का उपयोग करें - और CharMatcher के लिए आप के साथ or कर सकते हैं।

+0

पहले कोड में, रेगेक्स का उपयोग करके, मैं श्वेतसूची के लिए अगले वर्ण कैसे जोड़ूं (न केवल [और], बल्कि अंतरिक्ष और अगले वर्ण)? – PerwinCZ

+4

चूंकि पेर्विनसीजेड निचले और ऊपरी केस अक्षरों की तलाश में है, तो यह '[^ ए-ज़ा-जे 0-9 \\ [\\]] 'होना चाहिए? – jonhopkins

+0

@ जोनोपकिन्स: मैं बस कोड में क्या था पर जा रहा था - इसे स्पष्ट करने के लिए संपादित किया जाएगा। –

2

आप कोशिश करते हैं और सब कुछ है कि अपने श्वेत सूची में नहीं है से मेल खाते हैं और एक खाली स्ट्रिंग के साथ बदलना सकता:

String in = "asng $%& 123"; 
//this assumes your whitelist contains word characters and whitespaces, adapt as needed 
System.out.println(in.replaceAll("[^\\w\\s]+", "")); 
संबंधित मुद्दे