2011-09-26 16 views
66

मैं जावा का उपयोग कर स्ट्रिंग सेस्ट्रिंग से विशेष वर्ण कैसे निकालें?

- +^. : , 

जैसे विशेष वर्णों को हटाना चाहता हूं।

+0

सभी पात्रों का स्थान ले लेगा आप जाहिरा तौर पर पहले से ही पता है कि एक regex पर आधारित है कि कैसे आप अपने सवाल टैग किया है। क्या आपने 'स्ट्रिंग' कक्षा के लिए प्रलेखन पढ़ने का प्रयास किया था? विशेष रूप से, 'रेगेक्स' शब्द की तलाश करें; कुछ विधियां हैं, और कुछ विचार आपको बताएंगे कि कैसे आगे बढ़ना है ... :) –

+2

वाक्यांश "विशेष चरित्र" लगभग पूरी तरह अर्थहीन होने के लिए इतना अधिक उपयोग किया जाता है। यदि आपका मतलब है, "मेरे पास ** विशिष्ट ** वर्णों की यह सूची है जिसे मैं निकालना चाहता हूं," तो थॉमस सुझाव देता है और रेगेक्स कैरेक्टर क्लास के साथ अपना पैटर्न बना देता है और उन्हें 'replaceAll' दूर करता है। यदि आपके पास अधिक गूढ़ आवश्यकताओं हैं, तो प्रश्न संपादित करें। :) –

+1

वे विशेष पात्र नहीं हैं ... ये हैं: äâêíìéè क्योंकि वे आपके सामान्य 1-बाइट वर्ण प्रकार नहीं हैं - +^हैं ... वैसे भी, जैसा कि रे ने कहा था, या तो उनके लिए 'replaceAll' करें, या स्ट्रिंग पर एक पार्स करें, उन वर्णों को जोड़ें जो वर्ण नहीं हैं जिन्हें आप किसी अन्य स्ट्रिंग पर ले जाना चाहते हैं और अंत में केवल एक स्ट्रिंग पर + = करें जो आप वापस आ जाएंगे। सर्वोत्तम सामान्य उद्देश्य समाधान के लिए –

उत्तर

203

है कि आप विशेष वर्ण क्या परिभाषित पर निर्भर करता है, लेकिन replaceAll(...) कोशिश:

String result = yourString.replaceAll("[-+.^:,]",""); 

ध्यान दें कि ^ चरित्र सूची में उपस्थित पहले नहीं होना चाहिए, क्योंकि आप तो या तो इसे से बचने के लिए होगा या इसका मतलब होगा "कोई भी इन पात्रों"।

एक और ध्यान दें: - चरित्र सूची में पहले या पिछले एक होने की जरूरत है, अन्यथा आप इसे से बचने के लिए होगा या यह एक सीमा को परिभाषित करेगा (जैसे :-, मतलब होगा "श्रेणी में सभी पात्रों : को ,)

तो, स्थिरता बनाए रखने के लिए और चरित्र स्थिति पर निर्भर नहीं होने के लिए, आप उन सभी पात्रों से बचना चाहेंगे जिनके पास नियमित अभिव्यक्तियों में विशेष अर्थ है (निम्नलिखित सूची पूर्ण नहीं है, इसलिए अन्य पात्रों से अवगत रहें (, {, $ इत्यादि):

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]",""); 


आप सभी विराम चिह्न और प्रतीकों से छुटकारा पाने चाहते हैं, इस regex का प्रयास करें: \p{P}\p{S} (: "\\p{P}\\p{S}" जावा तार में आप स्लैश वापस बचने के लिए होगा कि ध्यान में रखना)।

String result = yourString.replaceAll("[^\\w\\s]",""); 

इसका मतलब यह है: यदि आप वास्तव में परिभाषित कर सकते हैं जो आपके स्ट्रिंग में छोड़ दिया जाना चाहिए

एक तीसरा रास्ता, कुछ इस तरह हो सकता है सब कुछ है कि एक शब्द चरित्र (AZ किसी भी मामले में नहीं है की जगह, 0-9 या _) या सफेद जगह।

संपादित करें: कृपया ध्यान दें कि कुछ अन्य पैटर्न हैं जो उपयोगी साबित हो सकते हैं। हालांकि, मैं उन सभी को समझा नहीं सकता, इसलिए regular-expressions.info के संदर्भ खंड पर एक नज़र डालें।

String result = yourString.replaceAll("[^\\p{L}\\p{Z}]",""); 

regex सब कुछ किसी भी भाषा में एक पत्र और एक विभाजक (सफेद स्थान, LINEBREAK आदि नहीं है मेल खाता है:

यहाँ के रूप में रे ने सुझाव दिया, "स्वीकृत वर्णों को परिभाषित" दृष्टिकोण को कम प्रतिबंधक विकल्प है ।)। ध्यान दें कि आप [\P{L}\P{Z}] (ऊपरी केस पी का अर्थ उस संपत्ति नहीं होने का मतलब है) का उपयोग नहीं कर सकते हैं, क्योंकि इसका अर्थ यह होगा कि "वह सब कुछ जो पत्र नहीं है या व्हाइटस्पेस नहीं है", जो लगभग सबकुछ से मेल खाता है, क्योंकि पत्र सफेद नहीं हैं और इसके विपरीत।

यूनिकोड

पर अतिरिक्त जानकारी कुछ यूनिकोड वर्ण विभिन्न संभव तरीके की वजह से उन्हें सांकेतिक शब्दों में बदलना करने के लिए (एक कोड बिंदु या कोड अंक का एक संयोजन के रूप में) समस्याएं पैदा करने लगते हैं। अधिक जानकारी के लिए कृपया regular-expressions.info देखें।

+0

+1। चूंकि आप ओपी से ब्योरे की अनुपस्थिति में कुछ बदलावों को सूचीबद्ध कर रहे हैं, इसलिए आप '[\ P {L}] ' –

+0

जैसे पैटर्न दिखा सकते हैं और समझा सकते हैं यह भी ध्यान दें कि' -' वर्ण पहला या अंतिम होना चाहिए सूची में या इसे बचने की जरूरत है। – Kapep

+0

'[^ \\ p {एल} \\ p {Z}] 'जर्मन उमलॉट्स (ä, ö, ü) को भी समाप्त करने के लिए प्रतीत होता है (कम से कम यह मेरे लिए ऐसा करता है: /), इसलिए" रेगेक्स सब कुछ मेल खाता है यह किसी भी भाषा में एक पत्र नहीं है "100% सही नहीं लगता है – Peter

13

String कक्षा की replaceAll() विधि का प्रयास करें।

बीटीडब्ल्यू यहां विधि, वापसी प्रकार और पैरामीटर है।

public String replaceAll(String regex, 
         String replacement) 

उदाहरण:

String str = "Hello +-^ my + - friends^^^-- ^^^ +!"; 
str = str.replaceAll("[-+^]*", ""); 

यह सब { '^', '+', '-'} को निकाल देना चाहिए वर्ण, जिसे आप निकालना चाहते थे!

2

जावा में String.replaceAll() विधि का उपयोग करें। replaceAll आपकी समस्या के लिए पर्याप्त होना चाहिए।

13

के रूप में यहाँ वर्णित http://developer.android.com/reference/java/util/regex/Pattern.html

पैटर्न नियमित अभिव्यक्ति संकलित कर रहे हैं। कई मामलों में, String.matches, String.replaceAll और String.split जैसी सुविधा विधियां बेहतर होंगी, लेकिन यदि आपको एक ही नियमित अभिव्यक्ति के साथ बहुत से काम करने की आवश्यकता है, तो इसे एक बार संकलित करने और इसे पुन: उपयोग करने के लिए और अधिक कुशल हो सकता है। पैटर्न वर्ग और उसके साथी, मैचर, स्ट्रिंग द्वारा उजागर की गई छोटी राशि की तुलना में अधिक कार्यक्षमता भी प्रदान करते हैं।

public class RegularExpressionTest { 

public static void main(String[] args) { 
    System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()(")); 
    System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^(")); 
} 

public static String getOnlyDigits(String s) { 
    Pattern pattern = Pattern.compile("[^0-9]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
public static String getOnlyStrings(String s) { 
    Pattern pattern = Pattern.compile("[^a-z A-Z]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
} 

परिणाम

String is = one 
Number is = 9196390097 
1

आप एकल चार के रूप में निम्नानुसार निकाल सकते हैं:

String str="+919595354336"; 

String result = str.replaceAll("\\\\+",""); 

System.out.println(result); 

उत्पादन:

919595354336 
0

अगर तुम सिर्फ वा जावा में एक शाब्दिक प्रतिस्थापन करने के लिए, किसी भी स्ट्रिंग से बचने के लिए Pattern.quote(string) का उपयोग करें।

myString.replaceAll(Pattern.quote(matchingStr), replacementStr) 
2

Specail चरित्र निकालें

स्ट्रिंग t2 = "@ # $%^& *() - ';!।?, /> < + abdd";

t2 = t2.replaceAll ("\\ W +", "");

आउटपुट होगा: अजीब।

यह पूरी तरह से काम करता है।

0

इस छोड़कर अक्षरांकीय

replaceAll("[^A-Za-z0-9]",""); 
संबंधित मुद्दे