2012-05-31 10 views
7

असल में मैं सिर्फ एक Stringजावा: क्या किसी के पास सरणी में स्ट्रिंग का सर्वोत्तम मिलान खोजने का तरीका है?

उदाहरण के लिए के करीबी मिलान (जरूरी सटीक नहीं) को खोजने के लिए एक रास्ता खोजने के लिए, {"pie", "delicious", "test"}

यह बहुत स्पष्ट है में "delicous" को खोजने की कोशिश कर रहा हूँ, लेकिन में मानों सरणी हमेशा उस विशिष्ट नहीं हो सकती है।

क्या कोई इसे प्राप्त करने के लिए कृपया मेरी सहायता कर सकता है।

उत्तर

17

इस पर निर्भर करता है कि आप "निकटतम" को कैसे परिभाषित करते हैं लेकिन Levenshtein Distance स्कोर का उपयोग करके एक आम तरीका है। अपाचे कॉमन्स में ऐसे a method in StringUtils हैं।

वहां से आपकी खोज विधि मूल रूप से बन जाती है: संग्रह में स्ट्रिंग ढूंढें जिसमें किसी दिए गए इनपुट के लिए सबसे छोटी लेवेनशेटिन दूरी हो।

+0

धन्यवाद, यह बहुत अच्छी तरह से काम कर रहा है :) अगर मेरे पास चॉकलेटसेर्ट और चॉकलेट है और मैं चॉकलेट टाइप करता हूं तो यह अभी भी पाई के लिए जाना प्रतीत होता है, लेकिन यह पहले से कहीं ज्यादा बेहतर है: पी धन्यवाद एक टन! –

+0

दूसरा लिंक टूटा हुआ है। कृपया अद्यतन करें। (यह संभवतः लिंक है - https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence,%20java.lang। CharSequence)) –

+0

@ KazekageGaara धन्यवाद, किया। –

2

इसके लिए जावा में कुछ भी नहीं बनाया गया है। आप किसी तृतीय-पक्ष लाइब्रेरी की कोशिश कर सकते हैं जैसे SecondString या FREJ

2

लेवेनशेटिन दूरी के संयोजन के साथ उपयोग किया जा सकता है एक और दृष्टिकोण पहले शब्दों के ध्वन्यात्मक प्रतिनिधित्व ले रहा है। ऐसा करने के लिए एक एल्गोरिदम Metaphone है।

user guide for Apache Commons Codec में इस और कुछ अन्य एन्कोडर्स का विवरण है।

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

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