2010-02-12 13 views
6

मेरे पास कुछ कोड है जो मैं पर्ल से जावा में परिवर्तित कर रहा हूं। यह s/// ऑपरेटर सहित नियमित अभिव्यक्तियों का बहुत भारी उपयोग करता है। मैं लंबे समय से पर्ल का उपयोग कर रहा हूं और अभी भी चीजों को करने के जावा तरीके से उपयोग कर रहा हूं। विशेष रूप से, स्ट्रिंग्स के साथ काम करना मुश्किल लगता है। क्या किसी को जावा फ़ंक्शन पता है या उसके पास s/// लागू करता है? इतना है कि यह कुछ इस तरह, उदाहरण के लिए संभाल सकता है: (। हो सकता है कि नहीं एक महान उदाहरण है, लेकिन आप अंदाजा हो)जावा पर्ल के एस /// ऑपरेटर के बराबर है?

$newString =~ s/(\bi'?\b)/\U$1/g; 

धन्यवाद।

+3

जकार्ता ओआरओ regexp लाइब्रेरी पर एक नज़र डालें, \ U समर्थन http://jakarta.apache.org/oro/api/org/apache/oro/text/regex/Perl5Substitution.html कक्षा – rsp

+0

बहुत कुछ दिखता है उपयोगी, धन्यवाद! – reid

+0

इसे थोड़ा सा देखने के बाद, ओआरओ वास्तव में बहुत उपयोगी है। एस /// और एक अंतर्निर्मित \ U ऑपरेटर होने के नाते बहुत अच्छा है। अब तक, मैं इसकी अनुशंसा करता हूं! – reid

उत्तर

1

स्ट्रिंग की replaceAll(...) विधि पर एक नज़र डालें। ध्यान दें कि जावा \U (ऊपरी-केस) सुविधा का समर्थन नहीं करता है।

+0

धन्यवाद। मुझे Matcher.replaceAll भी मिला है()। क्या वे मैच को ऊपर उठाने के मेरे उदाहरण को संभालने के लिए पर्याप्त शक्तिशाली हैं, हालांकि ...? – reid

+0

'Matcher.replaceAll()' का उपयोग 'स्ट्रिंग' की' replaceAll() 'द्वारा किया जाता है। तो यह आपके अन्य प्रश्न का उत्तर देता है: नहीं, '\ U' समर्थित नहीं है। –

+0

मैंने आपके उत्तर के \ U भाग को याद किया। मुझे लगता है कि मुझे यह स्वीकार करना होगा कि प्रतिस्थापित करें() अधिकांश के लिए काम करेगा लेकिन सभी मामलों में नहीं। – reid

6

कुछ भी नहीं है तो साफ है, लेकिन जावा में आप String.replaceAll() का उपयोग करें या Pattern का उपयोग की तरह कुछ करने के लिए होगा:

Pattern p = Pattern.compile("(\bi'?\b)"); 

Matcher m = p.matcher(stringToReplace); 
m.replaceAll("$1"); 

जावा के regex वाक्य रचना के लिए पैटर्न डॉक्स की जाँच करें - यह पूरी तरह से पर्ल के साथ ओवरलैप नहीं करता है। कुछ मदद पुस्तकालय में बनाया

StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    String uppercaseGroup = m.group(1).toUpperCase(); 
    m.appendReplacement(sb, uppercaseGroup); 
} 
m.appendTail(); 

नहीं के रूप में ऊपर संदर्भित जकार्ता-ऑरो पुस्तकालय के रूप में पर्ल के करीब है, लेकिन निश्चित रूप से:


uppercasing पाने के लिए, Matcher.appendReplacement की जाँच करें। - ठीक बहुत धीमी गति से

String A = "Test"; 
A.replaceAll("(\bi'?\b)","\U$1"); 

संपादित करें:

2

एक स्ट्रिंग वर्ग तुम इतनी तरह .replaceAll() विधि का उपयोग कर सकते का एक उदाहरण को देखते हुए। इसके अलावा स्पष्ट रूप से \ U किसी अन्य उत्तर के अनुसार समर्थित नहीं है।

नोट - मुझे यकीन नहीं है कि लालची प्रतीक कैसे अनुवाद करता है, यदि आप विशेष रूप से इसकी आवश्यकता हो तो आप जावा के कार्यान्वयन को देखने का प्रयास करना चाहेंगे।

+0

आपकी प्रतिस्थापन स्ट्रिंग में '\ U' एक रनटाइम अपवाद को फेंकने का कारण बन जाएगा। –

+1

धन्यवाद। मैं जावा में अतिरिक्त बैकस्लाशिंग के अलावा, regexp वाक्यविन्यास समान है, इस पर बहुत प्रभावित हुआ है। (हालांकि, यू के बारे में बहुत बुरा।) मेरी इच्छा है कि जावा की स्ट्रिंग हैंडलिंग पर्ल की तरह अधिक हो .... – reid

+1

स्ट्रिंग हेरफेर की बात आती है, पर्ल राजा है। लेकिन हां, जावा का रेगेक्स कार्यान्वयन एक ठोस और शक्तिशाली है, हालांकि कई बैकस्लाश और ऑब्जेक्ट सृजन के साथ कई बार वर्बोज़ होता है। –

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