एक स्ट्रिंग में विशेष पात्रों को कैसे बदला जाए?


91

मेरे पास बहुत सारे विशेष पात्रों के साथ एक स्ट्रिंग है। मैं उन सभी को हटाना चाहता हूं, लेकिन वर्णमाला के पात्रों को रखना चाहता हूं।

मैं यह कैसे कर सकता हूँ?


इस धागे को देखें: stackoverflow.com/questions/3438854/…
सिरिल गैंडन

जवाबों:


187

यह इस बात पर निर्भर करता है कि आपका क्या मतलब है। यदि आप उनसे छुटकारा पाना चाहते हैं, तो यह करें:
(अपडेट: जाहिर है कि आप अंकों को भी रखना चाहते हैं, उस स्थिति में दूसरी पंक्तियों का उपयोग करें)

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);

लेकिन अगर आप उच्चारण पात्रों को कुछ समझदार बनाना चाहते हैं, जो अभी भी एएससीआई है, तो इन प्रश्नों को देखें:


जब मैं इस फ़ंक्शन का उपयोग कर रहा हूं तो यह सभी नंबरों को हटा रहा है। लेकिन मैं न ही हटाने के लिए नंबर चाहता हूं। विशेष वर्णों को हटाना चाहते हैं। कृपया कुछ सुझाव दें ..
तनु

अच्छा आपने कहा कि आप केवल वर्णमाला चाहते थे। लेकिन मैं एक मिनट में अपना जवाब अपडेट करूंगा
सीन पैट्रिक फ्लोयड

मैं स्ट्रिंग को सम्‍मिलित करना चाहता हूं लेकिन कुछ शर्त के साथ। 1. यदि केवल एक परिणाम की आवश्यकता है, तो कोई संक्षिप्त रूप नहीं है। 2. यदि परिणाम निम्नांकित रूप में समाप्‍त स्ट्रिंग से 1 से अधिक है: स्टैक + ओवर + फ्लो
तनु

2
@ तनु यह एक अलग सवाल है। इसे एक नया बनाएं
Pekka

क्या होगा यदि मैं नहीं चाहता कि रिक्त स्थान निकाले जाएं? या कहें कि सभी स्थान जैसे टैब्स, न्यूलाइन्स केवल एक स्थान के रूप में ढह गए?
शापित

74

मैं इसका उपयोग कर रहा हूं।

s = s.replaceAll("\\W", ""); 

यह स्ट्रिंग से सभी विशेष वर्णों को प्रतिस्थापित करता है।

यहाँ

\ w: एक शब्द चरित्र, [a-zA-Z_0-9] के लिए छोटा

\ W: एक गैर-शब्द वर्ण


<स्क्रिप्ट> अलर्ट ('XSS अटैक') </ script> के लिए काम नहीं करता है। '<', '>', '' अक्षर कैसे निकालें?
मनोज

11

अल्फ़ान्यूमेरिक वर्ण रखने के लिए आप निम्न विधि का उपयोग कर सकते हैं।

replaceAll("[^a-zA-Z0-9]", "");

और अगर आप केवल वर्णमाला वर्ण रखना चाहते हैं तो इसका उपयोग करें

replaceAll("[^a-zA-Z]", "");

5
अंतरिक्ष उपयोग के लिएreplaceAll("[^a-zA-Z0-9 ]", "");
Qamar

6

किसी विशेष वर्ण को बदलें

replaceAll("\\your special character","new character");

पूर्व: सफेद जगह के साथ * की सभी घटना को बदलने के लिए

replaceAll("\\*","");

* यह कथन एक समय में केवल एक प्रकार के विशेष चरित्र को बदल सकता है


निश्चित रूप से जब मैं प्रश्न शीर्षक देख रहा था तो मैं क्या देख रहा था "एक स्ट्रिंग में विशेष पात्रों को कैसे बदलें?" धन्यवाद!
मि। ड्रू

2
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

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

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

जहां इनपुट स्ट्रिंग है जिसे हमें वर्णों को बदलने की आवश्यकता है।


2

आंद्रेज डॉयल के जवाब के उदाहरण के बाद , मुझे लगता है कि बेहतर समाधान का उपयोग करना है 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;
    }
}

0

आप सभी विशेष वर्णों को खोजने के लिए स्ट्रिंग्स पर बुनियादी नियमित अभिव्यक्तियों का उपयोग कर सकते हैं या उपयोगकर्ता परिभाषित स्ट्रिंग्स को खोजने / संशोधित / हटाने के लिए पैटर्न और मिलान वर्गों का उपयोग कर सकते हैं। इस लिंक में कुछ सरल और नियमित अभिव्यक्ति के उदाहरणों को समझना आसान है: http://www.vogella.de/articles/JavaRegularExpressions/article.html


0

आप विंडो पीसी में CSSermap टूल से उस जंक कैरेक्टर के लिए यूनिकोड प्राप्त कर सकते हैं और कॉपीराइट प्रतीक के लिए \ u eg \ u00a9 जोड़ सकते हैं। अब आप उस कबाड़ को उस विशेष कबाड़ कबाड़ वाले के साथ उपयोग कर सकते हैं, किसी भी कबाड़ पात्र को हटा नहीं सकते, बल्कि उचित यूनिकोड के साथ बदल सकते हैं।



-1
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();

क्या आप रेगेक्स को थोड़ा समझा सकते हैं?
स्टडुनबार

मेरा सुझाव है कि आप अपने कोड को समझाने के लिए अपने उत्तर अनुभाग में नोट्स जोड़ें। कृपया अच्छे उत्तर लिखने के तरीके के बारे में अधिक पढ़ें ।
जो फेरडेज़

यह वास्तव में सवाल का जवाब नहीं देता है। यदि आपका कोई अलग प्रश्न है, तो आप प्रश्न पूछकर क्लिक करके पूछ सकते हैं । पर्याप्त प्रतिष्ठा होने पर आप इस प्रश्न पर अधिक ध्यान आकर्षित करने के लिए एक इनाम भी जोड़ सकते हैं । - समीक्षा से
अमन गर्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.