के सभी इंडेक्स लौटें क्या एक बड़ी स्ट्रिंग (स्रोत) के भीतर एक सबस्ट्रिंग (लक्ष्य) के लिए सभी इंडेक्स की एक सूची प्राप्त करने के लिए एक स्कैला लाइब्रेरी एपीआई विधि (और यदि नहीं, एक मूर्खतापूर्ण तरीका) है? मैंने ScalaDoc को देखने की कोशिश की है, लेकिन कुछ भी स्पष्ट नहीं मिला। इतनी सारी उपयोगी चीजें करने के कई तरीके हैं, मुझे लगता है कि मैं सिर्फ सही खोज शब्द सबमिट नहीं कर रहा हूं।किसी विशेष सबस्ट्रिंग
उदाहरण के लिए, यदि मेरे पास "नाम: यो, नाम: जिम, नाम: नाम, नाम: बोझो" का स्रोत स्ट्रिंग है और मैं "नाम:" की एक लक्षित स्ट्रिंग का उपयोग करता हूं, तो मैं वापस प्राप्त करना चाहता हूं सूची [Int] सूची (0, 8, 17, 27)।
def indexesOf(source: String, target: String, index: Int = 0, withinOverlaps: Boolean = false): List[Int] = {
def recursive(index: Int, accumulator: List[Int]): List[Int] = {
if (!(index < source.size)) accumulator
else {
val position = source.indexOf(target, index)
if (position == -1) accumulator
else {
recursive(position + (if (withinOverlaps) 1 else target.size), position :: accumulator)
}
}
}
if (target.size <= source.size) {
if (!source.equals(target)) {
recursive(0, Nil).reverse
}
else List(0)
}
else Nil
}
किसी भी मार्गदर्शन तुम मुझे एक उचित मानक पुस्तकालय प्रवेश बिंदु के साथ इस जगह बहुत सराहना की जाएगी दे सकते हैं:
यहाँ समस्या को हल करने के लिए अपने त्वरित हैक है।
अद्यतन 2014/Jul/22:
सिद्धार्थ दत्ता की जवाब से प्रेरित होकर, मैं मेरे कोड tighted। इसके अतिरिक्त
def indexesOf(source: String, target: String, index: Int = 0, withinOverlaps: Boolean = false): List[Int] = {
@tailrec def recursive(indexTarget: Int, accumulator: List[Int]): List[Int] = {
val position = source.indexOf(target, indexTarget)
if (position == -1) accumulator
else
recursive(position + (if (withinOverlaps) 1 else target.size), position :: accumulator)
}
recursive(index, Nil).reverse
}
, अगर मैं "aaaaaaaa" का एक स्रोत स्ट्रिंग है और मैं "आ" का लक्ष्य स्ट्रिंग का उपयोग, मैं डिफ़ॉल्ट रूप से पसंद वापस एक सूची [इंट] की प्राप्त करने के लिए होगा: अब यह इस तरह दिखता है सूची (0, 2, 4, 6) जो एक पाए गए सबस्ट्रिंग के अंदर एक खोज शुरू करती है। डिफ़ॉल्ट ओवरऑप्स पैरामीटर के लिए "सत्य" पास करके डिफ़ॉल्ट को ओवरराइड किया जा सकता है, जिसमें "aaaaaaaa"/"aa" केस सूची (0, 1, 2, 3, 4, 5, 6) वापस आ जाएगा।
नहीं, "एक [मानक] विधि" नहीं है पाने के लिए। साथ ही, चूंकि यह कोड काम कर रहा है, इसलिए यह * कोड-समीक्षा के लिए अधिक उपयुक्त हो सकता है। – user2864740
@ chaotic3quilibrium किसी भी तरह से आप बीएसडी लाइसेंस कर सकते हैं कि जिस तरह से बॉस मैन मुझ पर पागल नहीं होता है अगर मैं इसे कॉपी/अनुकूलित करता हूं? :) – ericpeters
@ericpeters यह मेरी समझ है कि StackOverflow पर यहां पोस्ट किए गए किसी भी कोड स्निपेट को अनिवार्य रूप से सार्वजनिक डोमेन माना जा सकता है; यानी किसी भी लाइसेंस बाधाओं से अनगिनत, जो भी आपको आवश्यक संदर्भ में स्निपेट को काट/पेस्ट/संशोधित/अनुकूलित करने की क्षमता को सीमित करता है। – chaotic3quilibrium