2016-11-23 4 views
9

में मानों के एक सेट में एक पैटर्न ढूँढना जावा में तारों की सूची में एक सामान्य पैटर्न निकालने का कोई तरीका है?जावा

उदाहरण के लिए, अगर हम मान की एक सूची है: '-', फिर एक पत्र एल और अंत में एक संख्यात्मक चरित्र

001-L1 
002-L2 
003-L3 
004-L4 
... 

वहाँ निकालना हम 3digits है कि एक तरह से के बाद है?

मुझे लगता है कि इसमें सामान्य सबस्ट्रिंग्स या ऐसा कुछ करने के साथ कुछ करना है लेकिन मुझे अभी तक कुछ भी नहीं मिला है।

धन्यवाद!

संपादित करें: जाहिर है कि यह एक पूर्ण मान्यता नहीं होगी, यह केवल डेटा के आधार पर एक सिफारिश वापस कर देगा।

जो मैं बनाने की कोशिश कर रहा हूं वह this के करीब कुछ है। वीडियो में, जब उपयोगकर्ता कॉलम पर क्लिक करता है, तो डेटा को ":" पर विभाजित करने की सिफारिश होती है।

+0

पैटर्न कुछ भी हो सकता है ???? –

+0

आपको संख्यात्मक अंकों को निकालने की आवश्यकता है या क्या? – skrtbhtngr

+4

* "कटौती" *? आप एक कृत्रिम बुद्धि की तरह मतलब है? – UnholySheep

उत्तर

4

मुझे लगता है कि आप पैटर्न को "कटौती" करना चाहते हैं कि तारों का एक सेट सामान्य हो सकता है, और regex का उपयोग करके उन्हें मान्य नहीं कर सकता है। यह समस्या पैटर्न पहचान से संबंधित हो सकती है।

  • आप अपने किसी भी दो तारों पर Longest Common Substring (सबसे लंबे समय तक आम उपक्रम) एल्गोरिदम लागू नहीं कर सकते हैं। ध्यान दें कि तारों की आपकी सूची के अनुसार, आपको दो सबसे लंबे आम सबस्ट्रिंग्स 00 और -L मिल सकते हैं, इसलिए आपको इसकी देखभाल करने की आवश्यकता है।
  • फिर, जब आप परिणामस्वरूप एक सामान्य सबस्ट्रिंग प्राप्त करते हैं, तो अन्य स्ट्रिंग्स में पैटर्न की जांच करने के लिए बस contains() विधि का उपयोग करें।

यह विधि तभी काम करती है जब तारों के बीच सामान्य पैटर्न कम से कम कुछ वर्ण होता है।

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

आप दिए गए वीडियो में की तरह कुछ लागू करना चाहते हैं, तो आप सिर्फ एक निश्चित परिसीमक के आधार पर तार विभाजित करने के लिए की जरूरत है। एक आसान और अनुभवहीन दृष्टिकोण:

  • संभव सीमांकक की एक सूची बनाएं, :, ., -, ,, :: आदि
  • खोजें सभी अपने एक निश्चित सीमांकक की घटना के लिए तार की तरह। एलसीएस एल्गोरिदम काम नहीं करेगा क्योंकि स्ट्रिंग्स में सामान्य डेटा मान हो सकते हैं (जैसे वीडियो में "हां" और "नहीं") जो कि डिलीमीटर के रूप में नहीं हैं।
  • split डिलीमीटर पर आधारित तार, यदि यह तारों के सभी (या यहां तक ​​कि सबसे अधिक) में पाया जाता है!

इस से अधिक इष्टतम समाधान हो सकते हैं!

+0

हाँ यह समस्या से निपटने का एक तरीका है। यह बिल्कुल पैटर्न पहचान है जिसे मैं ढूंढ रहा हूं, लेकिन मुझे कुछ भी नहीं मिला जो मेरी मदद कर सकता है। स्ट्रिंग कम से कम कुछ वर्ण होने पर विधि सर्वोत्तम क्यों काम करती है? उपर्युक्त उदाहरण के लिए, क्या हम सभी तारों के लिए -एल नहीं प्राप्त कर सकते हैं (माना जाता है कि सभी मान इस तरह से बनाए गए हैं)? –

+1

यदि आपके स्ट्रिंग्स के सेट में केवल एक वर्ण है, जैसे कि सामान्य पैटर्न के रूप में '-', एलसीएस एल्गोरिदम को इसे ढूंढने में परेशानी हो सकती है क्योंकि '00' पहले पता लगाया जाएगा। '-L' ठीक काम करेगा लेकिन आपको एल्गोरिदम को दो स्ट्रिंग्स जैसे '012-L4' और' 001-L5' में इनपुट देना पड़ सकता है ताकि ** ** केवल ** एक सबसे लंबा आम सबस्ट्रिंग ('-L') हो । – skrtbhtngr

+0

मूल पोस्ट में अपना संपादन देखें, यह दिखा सकता है कि मैं क्या करने की कोशिश कर रहा हूं। और हां, बेशक डेटा उपरोक्त 4 मानों तक ही सीमित नहीं है, सूची काफी लंबी है और फिर हम -एल पैटर्न पा सकते हैं। –