मेरे पास बहुत सारे विशेष पात्रों के साथ एक स्ट्रिंग है। मैं उन सभी को हटाना चाहता हूं, लेकिन वर्णमाला के पात्रों को रखना चाहता हूं।
मैं यह कैसे कर सकता हूँ?
जवाबों:
यह इस बात पर निर्भर करता है कि आपका क्या मतलब है। यदि आप उनसे छुटकारा पाना चाहते हैं, तो यह करें:
(अपडेट: जाहिर है कि आप अंकों को भी रखना चाहते हैं, उस स्थिति में दूसरी पंक्तियों का उपयोग करें)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
या समकक्ष:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(इन सभी को रेगेक्स पैटर्न को प्राथमिकता देकर और इसे स्थिर रूप से संग्रहीत करके काफी सुधार किया जा सकता है)
या, अमरूद के साथ :
private static final CharMatcher ALNUM =
CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);
लेकिन अगर आप उच्चारण पात्रों को कुछ समझदार बनाना चाहते हैं, जो अभी भी एएससीआई है, तो इन प्रश्नों को देखें:
मैं इसका उपयोग कर रहा हूं।
s = s.replaceAll("\\W", "");
यह स्ट्रिंग से सभी विशेष वर्णों को प्रतिस्थापित करता है।
यहाँ
\ w: एक शब्द चरित्र, [a-zA-Z_0-9] के लिए छोटा
\ W: एक गैर-शब्द वर्ण
किसी विशेष वर्ण को बदलें
replaceAll("\\your special character","new character");
पूर्व: सफेद जगह के साथ * की सभी घटना को बदलने के लिए
replaceAll("\\*","");
* यह कथन एक समय में केवल एक प्रकार के विशेष चरित्र को बदल सकता है
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
यहां अंतरिक्ष, अल्पविराम और एम्परसैंड को छोड़कर सभी विशेष वर्ण प्रतिस्थापित किए गए हैं। आप निम्नलिखित नियमित अभिव्यक्ति द्वारा स्थान, अल्पविराम और एम्परसैंड को छोड़ सकते हैं।
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
जहां इनपुट स्ट्रिंग है जिसे हमें वर्णों को बदलने की आवश्यकता है।
आंद्रेज डॉयल के जवाब के उदाहरण के बाद , मुझे लगता है कि बेहतर समाधान का उपयोग करना है org.apache.commons.lang3.StringUtils.stripAccents():
package bla.bla.utility;
import org.apache.commons.lang3.StringUtils;
public class UriUtility {
public static String normalizeUri(String s) {
String r = StringUtils.stripAccents(s);
r = r.replace(" ", "_");
r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
return r;
}
}
आप सभी विशेष वर्णों को खोजने के लिए स्ट्रिंग्स पर बुनियादी नियमित अभिव्यक्तियों का उपयोग कर सकते हैं या उपयोगकर्ता परिभाषित स्ट्रिंग्स को खोजने / संशोधित / हटाने के लिए पैटर्न और मिलान वर्गों का उपयोग कर सकते हैं। इस लिंक में कुछ सरल और नियमित अभिव्यक्ति के उदाहरणों को समझना आसान है: http://www.vogella.de/articles/JavaRegularExpressions/article.html
आप विंडो पीसी में CSSermap टूल से उस जंक कैरेक्टर के लिए यूनिकोड प्राप्त कर सकते हैं और कॉपीराइट प्रतीक के लिए \ u eg \ u00a9 जोड़ सकते हैं। अब आप उस कबाड़ को उस विशेष कबाड़ कबाड़ वाले के साथ उपयोग कर सकते हैं, किसी भी कबाड़ पात्र को हटा नहीं सकते, बल्कि उचित यूनिकोड के साथ बदल सकते हैं।
रिक्त स्थान के लिए "[^ az AZ 0-9]" इस पैटर्न का उपयोग करें
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();