2012-04-12 10 views
5

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

समस्या यह है कि किसी बिंदु पर String.matches() फ़ंक्शन अपेक्षा के अनुसार काम करना बंद कर देता है। पहले क्या काम किया, अब काम नहीं करता है।

उदाहरण के लिए, JUnit कोड:

import junit.framework.Assert; 
import org.junit.Test; 

public class RegExTest { 

    @Test 
    public void testThousandSeperatorRegex() 
    { 
     String regEx = "([0-9]{1,3}([0-9]{3})*(\\.[0-9]+)?|\\.[0-9]+)"; 
     Assert.assertEquals(true, "1".matches(regEx)); 
     Assert.assertEquals(true, "10".matches(regEx)); 
     Assert.assertEquals(true, "100".matches(regEx)); 
     Assert.assertEquals(true, "1 000".matches(regEx)); 
     Assert.assertEquals(true, "10 000".matches(regEx)); 
     Assert.assertEquals(true, "100 000".matches(regEx)); 
     Assert.assertEquals(true, "1 000 000".matches(regEx)); 
     Assert.assertEquals(true, "10 000 000".matches(regEx)); 
     Assert.assertEquals(false, "10000.56".matches(regEx)); 
     Assert.assertEquals(true, "8 734".matches(regEx)); 
    } 
} 

अंतिम पंक्ति के साथ "8 734" विफल रहता है। जब मैं इसे "1 000" से बदलता हूं तो यह असफल रहता है। आखिरकार, एक ही रन पर एक ही कोड दावे की चौथी पंक्ति में गुजरता है, लेकिन आखिरी में विफल रहता है (नया कोड सहेजा गया है!)। लेकिन ऐसे समय होते हैं जब सब कुछ ठीक होने पर काम करना शुरू होता है .. फिर से असफल होना शुरू करें। तो मुझे लगता है कि मेरे मुद्दे को पुन: उत्पन्न करना मुश्किल होगा। शायद कुछ और है जो मैं गलत कर रहा हूं जिसे मैंने देखा नहीं है और इस प्रकार वर्णित किया है, लेकिन मैंने इसे यथासंभव सादा बनाने की कोशिश की। यह मुझे बहुत भ्रमित करता है। क्या String.matches() में स्मृति है या क्या?

नियमित अभिव्यक्ति के साथ कुछ गलत हो सकता है? मैं ^$ छोड़ रहा हूं क्योंकि स्ट्रिंग.मैट्स पूरी स्ट्रिंग पर वैसे भी काम करता है। मैंने java.util.regex और jregex संकुल का प्रयास किया है, समस्या जारी है।

मैं जेडीके 6u31 का उपयोग कर रहा हूं।

किसी भी विचार की सराहना की।

यूपीडी: ठीक है, इस क्यू को पोस्ट करने के बाद कोड काम करना शुरू कर दिया और अब तक असफल नहीं हुआ है। शायद यह मेरे साथ कुछ था, लेकिन इसने मुझे पिछले हफ्ते से परेशान किया है और मैं इसे बार-बार दोहराने में सक्षम हूं। मैं कोड के अपने टुकड़े के साथ जारी रखूंगा और यदि यह काम जारी रहेगा तो मैं इस मुद्दे को बंद कर दूंगा। इसके अलावा मैं यह निर्धारित करने की कोशिश करूंगा कि वास्तव में समस्या का क्या कारण है। इस बीच, यदि वहां कोई ऐसा व्यक्ति है जिसने एक ही समस्या का सामना किया है, तो कृपया अपना ज्ञान साझा करें। अन्यथा, यह एक ऐसी समस्या की तरह दिखता है जिसे ज्ञान द्वारा हल किया जा सकता है, डीबगिंग द्वारा नहीं। मूर्खता से खुद को बचाने के लिए मैं कह सकता हूं कि मैं कई सालों से प्रोग्रामिंग कर रहा हूं और यह मंचों में पहली बार पोस्ट है :)। अब तक मैं डिबगिंग, दस्तावेज़ पढ़ने और अन्य क्यू के खोज मंचों के साथ अपनी समस्याओं को हल करने में सक्षम था।

+0

जेडीके 6u19 –

+0

में मेरे लिए काम करता है क्या आप उन जेनिट परीक्षणों को कॉल करने वाले वास्तविक वर्ग को पोस्ट कर सकते हैं? –

+4

क्या आप वाकई पुरानी संकलित कक्षा नहीं चला रहे हैं? –

उत्तर

1

ठीक कहती है, तो अब तक मुझे इस समस्या का सामना नहीं हुआ है।

अन्य लोगों के लिए जो किसी से मिलते हैं, मैं केवल उस माहौल को साफ करने का सुझाव दे सकता हूं जिसमें आप काम कर रहे हैं। इसे दूषित जेवीएम या कंप्यूटर की मेमोरी स्टेटस के साथ कुछ करना है।

उनके योगदान के लिए सभी को धन्यवाद।

0

बीटीडब्लू: पूर्व-संकलित पैटर्न Pattern p = Pattern.compile(regEx) और सभी दावों के लिए एकल मैचर assertTrue(p.matcher("1 000 000").matches()) का उपयोग करने का प्रयास करें। स्ट्रिंग की मैस विधि हर बार जब आप इसे

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