मैं समानार्थी को संग्रहीत करने के लिए हैश मैप का उपयोग कर थिसॉरस बना रहा हूं।जावा: रेगेक्स पर आधारित हैश मैप कुंजी में खोजें?
मैं नियमित अभिव्यक्ति के आधार पर शब्दों को खोजने की कोशिश कर रहा हूं: विधि को पैरामीटर के रूप में एक स्ट्रिंग लेनी होगी और परिणाम की एक सरणी वापस करनी होगी। यहाँ इस पर मेरा पहला वार है:
public ArrayList<String> searchDefinition(String regex) {
ArrayList<String> results = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Set<String> keys = thesaurus.keySet();
Iterator<String> ite = keys.iterator();
while (ite.hasNext()) {
String candidate = ite.next();
Matcher m = p.matcher(candidate);
System.out.println("Attempting to match: " + candidate + " to " + regex);
if (m.matches()) {
System.out.println("it matches");
results.add(candidate);
}
}
if (results.isEmpty()) {
return null;
}
else {
return results;
}
}
अब, यह के रूप में मैं उम्मीद होती है (या शायद मैं नियमित अभिव्यक्ति गलत तरीके से उपयोग कर रहा हूँ) काम नहीं करता। अगर मैं hashmap में निम्नलिखित कुंजी:
cat, car, chopper
तो searchDefinition("c")
या searchDefinition("c*")
फोन करके मैं null
मिलता है।
- मैं इस काम को अपेक्षित कैसे कर सकता हूं?
- क्या थिसॉरस द्वारा आवश्यक रखने के लिए हैश मैप की तुलना में बेहतर डेटा संरचना है? (जिज्ञासा केवल, इस असाइनमेंट के लिए हमें जावा संग्रह मानचित्र का उपयोग करने के लिए कहा जाता है)।
- और कुछ भी मैं ऊपर दिए गए कोड में निर्दोष रूप से कर रहा हूं?
धन्यवाद, दान
संपादित करें: मैं उदाहरण में सुधार किया है। यह सही काम का उपयोग करने पर भी काम नहीं करता है।
क्लिंट का जवाब है। लेकिन ध्यान दें कि कॉलिंग() "c *" के साथ _any_ प्रविष्टि से मेल खाएगी - क्योंकि सभी प्रविष्टियों में 0 या अधिक सी है। अपने regexes से सावधान रहें। –
खासकर जब से आप सीधे पैटर्न कंपाइलर में रेगेक्स पास कर रहे हैं। आप आसानी से PatternSyntaxException प्राप्त कर सकते हैं। – Clint
सवाल नहीं है, लेकिन खाली के लिए शून्य वापस न करें और लूप के लिए बढ़ाए गए उपयोग का उपयोग करें। –