2016-03-16 3 views
6

से गैर लैटिन मूल पात्रों को दूर चलो कहते हैं कि मैं निम्नलिखित कोड डालें: , , , , , :जावा स्ट्रिंग

String description = "★★★★★ ♫ ♬ This description ✔✔ ▬ █ ✖ is a mess. ♫ ♬ ★★★★★"; 

मैं गैर-लैटिन वर्ण निकालना चाहते हैं और

और यह हो गए हैं: This description is a mess.

मुझे पता है कि शायद इन Wingdings की तरह पात्रों के टन है, तो निर्दिष्ट करने मैं निकालना चाहते हैं क्या करने के बजाय, मुझे लगता है कि यह सूची है कि मैं क्या रखना चाहते हैं बेहतर है : Basic Latin और Latin-1 supplements वर्ण।

मैंने पाया कि मैं लेकिन बुनियादी लैटिन वर्णों

String clean_description = description.replaceAll("[^\\x00-\\x7F]", "").trim();

सब कुछ को दूर करने के लिए निम्न कोड का उपयोग कर सकते लेकिन वहाँ एक रास्ता भी लैटिन -1 पूरक पात्रों की रक्षा के लिए है?

+3

चूंकि यह है कि सीमा की तरह लग रहा आता है सही बुनियादी के बाद लैटिन, क्या आप इस पर regex को बदल नहीं सकते: '"[^ \\ x00 - \\ xFF]" '? – resueman

+0

@resueman यह एक उत्तर की तरह लगता है ... –

+0

'\ p {S}' regex आज़माएं, – Saleem

उत्तर

6

चरित्र को देखकर से लेकर आपके द्वारा दी गई, ऐसा लगता है कि "मूल लैटिन" और "लैटिन -1 की आपूर्ति करता है" निकट हैं (0x00 - 0x7F और 0x80 - 0xFF)।

तो आप प्रदान किए गए वही रेगेक्स का उपयोग कर सकते हैं, जिसे "लैटिन -1 पूरक" वर्णों को शामिल करने के लिए अभी विस्तारित किया गया है। यही कारण है कि इस प्रकार दिखाई देगा:

String clean_description = description.replaceAll("[^\\x00-\\xFF]", "").trim(); 

रूप Quinn द्वारा टिप्पणी में कहा, इस से हटाया वर्गों के बीच रिक्त स्थान से छुटकारा पाने के नहीं है, इसलिए परिणाम अतिरिक्त रिक्त स्थान है (जो या नहीं हो सकता है कि तुम क्या चाहते हैं)। यदि आप उन रिक्त स्थान को हटाना चाहते हैं, तो क्विन के रेगेक्स ([^(\\x00-\\xFF)]+(?:$|\\s*), यदि टिप्पणी हटा दी गई है) तो आपके लिए काम कर सकती है।

+1

परिणाम स्ट्रिंग में शब्दों के बीच अधिक रिक्त स्थान हैं। क्या यह ओपी वांछित प्रारूप है? '[^ (\\ x00 - \\ xFF)] + (?: $ | \\ s *) 'का उपयोग करके सुझाव दें, और' trim() 'से छुटकारा पाएं। – Quinn

3

आप एक अधिक वर्णनात्मक अभिव्यक्ति उपयोग इस चाहते हैं:

description.replaceAll("[^\\p{InBasic_Latin}\\p{InLatin-1Supplement}]", ""); 

या negations [\P{InBasic_Latin}&&\P{InLatin-1Supplement}] के चौराहे (नहीं है कि यह अधिक पठनीय है;))

+0

मैंने सभी उत्तरों का परीक्षण किया है और ऐसा लगता है कि यह एकमात्र ऐसा है जो वास्तव में '$ 'वर्ण (जो लैटिन -1 पूरक पूरक का हिस्सा है) को संरक्षित करता है। – RoboticR

+0

@RoboticR '[^ \ x00- \ xFF] 'का उपयोग करके वही करेगा। – Thomas

+0

आप सही हैं। मैंने उसे नहीं देखा। – RoboticR

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