2013-01-15 9 views
5

एक cyrillic स्ट्रिंग की रेगुलर एक्सप्रेशन से बनाने के लिए में cyirillic का उपयोग करने का एक उदाहरण देता हूँ, मैं इस एक तरह से किसी भी तरह का उपयोग करना चाहते हैं:regex जावा

String.replaceAll("Кириллица","")

बेशक यह काम नहीं करता। इसे काम करने के लिए मुझे क्या करना है?

ठीक है, मुझे लगता है कि विधि काम करती है, लेकिन यह मेरे लिए काम नहीं करती है। मैं कैसे जांच सकता हूं, विधि निष्पादित क्यों नहीं करती है?

...

हम्म, मैं स्ट्रिंग मैं सॉकेट के माध्यम से प्राप्त करने के लिए s1 = s1.replaceAll("[\\p{InCyrillic}]", ""); का उपयोग करने की कोशिश की। यह "Экзамен" शब्द सहित सभी साइरिलिक वर्णों का अपमानजनक काम करता है, लेकिन अगर मैं s1=s1.replaceAll("Экзамен","") का प्रयास करता हूं तो कुछ भी नहीं होता है।

लेकिन विधि s1=s1.replaceAll("Экзамен","") इस कार्यक्रम में परिभाषित स्थिर स्ट्रिंग के लिए उसी प्रोग्राम में काम किया। मुझे लगता है कि समस्या गलत वर्णमाला के कारण हो सकती है, लेकिन मैं अभी भी समझ नहीं पा रहा हूं कि मैं क्या गलत कर रहा हूं। स्ट्रिंग का अक्षर windows-1251 है। मैं इस कार्यक्रम में चारसेट के साथ प्रयोग करने की कोशिश की (अब यह jsp है), तरीकों

System.setProperty("file.encoding", "windows-1251"); 
response.setCharacterEncoding("windows-1251"); 

एक से दूसरे चारसेट से स्ट्रिंग परिवर्तित करने की कोशिश की इस्तेमाल करते हैं। और कोई अन्य परिवर्तन

+0

क्या काम नहीं करता है? क्या आप एक उदाहरण दे सकते हैं? कोई समस्या नहीं होनी चाहिए। – Henry

+0

यहां एक उदाहरण है: मेरे पास सिरिलिक के साथ एक स्ट्रिंग सी है, जिसमें अक्षर का Экзамен अनुक्रम है। मैं सी = c.replaceAll ("Экзамен", "") करता हूं; और एक स्ट्रिंग प्राप्त करें c = Введение в специальность (Б.3.2.1-ПиКО) 60,3Экзамен – user1956641

+0

नहीं, समस्या टॉमकैट या वर्णमाला के बारे में नहीं है। क्या ऐसा हो सकता है कि समस्या यह है कि मैं एक लंबी स्ट्रिंग में बदल रहा हूं? – user1956641

उत्तर

1

बस इस की कोशिश की:

String s1 = "Введение в специальность (Б.3.2.1-ПиКО)60,3Экзамен"; 
String s2 = s1.replaceAll("Экзамен", ""); 
System.out.println(s2); 

उत्पादन होता है:

Введение в специальность (Б.3.2.1-ПиКО)60,3 
+0

एचएम का प्रयास करूंगा, लेकिन फिर मुझे एक और परिणाम क्यों मिलेगा ... शायद वर्णसेट, या टोमकैट के साथ समस्याएं ... अजीब चीज यह है कि विधि केवल सिरिलिक पर ही काम नहीं करती है। लेकिन मुझे समस्या नहीं दिख रही है। – user1956641

4

यह स्पष्ट रूप से हो सकता है अगर आप मामले @ हेनरी के जवाब में अपने परिणाम दिखाते हैं। मुझे लगता है कि वर्ण या एन्कोडिंग में समस्या।

String s1 = "Экзaмен"; 
s1 = s1.replaceAll("[\\p{InCyrillic}]", ""); 
System.out.println(s1); 

कोड सभी सिरिलिक वर्ण निकाल देगा और आपको अमान्य एन्कोड किए गए वर्ण की पहचान कर सकते हैं: पहचान करने के लिए इस कोड के साथ सिरिलिक में स्ट्रिंग आप कर सकते हैं है।

अपने परिणाम "एक" या "ई", या "ae" तरह होगा, तो इसका मतलब है कि आपके स्ट्रिंग में लैटिन वर्णों जो सिरिलिक को simular मौजूद हैं, तो आप इस regex

s1 = s1.replaceAll("Экз[aa]м[ee]н", ""); 
का उपयोग कर बदलना चाहिए

जहां [ए-साइरिलिक कैरेक्टर और ए-लैटिन कैरेक्टर है] और इसी तरह।

अपने परिणाम के रूप में "Экзaмен", एन्कोडिंग में इस मुद्दे को हो जाएगा और मुझे आशा है कि इस लिंक की मदद से आप

How to determine if a String contains invalid encoded characters