वास्तव में कोई अच्छा जवाब नहीं है। जावा में एक पुनरावर्तक विशेष रूप से अलग वस्तुओं (वस्तुओं) के संग्रह पर लागू होता है। आपको लगता है कि String
, जो CharSequence
लागू करता है, अलग वर्णों का "संग्रह" होना चाहिए। इसके बजाए, इसे एक इकाई के रूप में माना जाता है जो वर्णों के साथ होता है।
जावा में, ऐसा लगता है कि इटरेटर केवल संग्रहों पर लागू होते हैं, न कि स्ट्रिंग के लिए। ऐसा कोई कारण नहीं है कि यह इस तरह क्यों है (जैसा कि मैं कह सकता हूं - आपको शायद गोस्लिंग या एपीआई लेखकों से बात करनी होगी); यह सम्मेलन या एक डिजाइन निर्णय प्रतीत होता है। दरअसल, CharSequence
Iterable
को लागू करने से कुछ भी नहीं है।
कहा कि, तुम इतनी तरह एक स्ट्रिंग में वर्णों से अधिक पुनरावृति कर सकते हैं:
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
}
या:
for(char c : str.toCharArray()) {
System.out.println(c);
}
या:
"Java 8".chars().forEach(System.out::println);
भी ध्यान रखें कि आप संशोधित नहीं कर सकते जगह में एक स्ट्रिंग का एक चरित्र क्योंकि स्ट्रिंग्स अपरिवर्तनीय हैं। एक स्ट्रिंग के लिए परिवर्तनीय साथी स्ट्रिंगबिल्डर (या पुराना स्ट्रिंगबफर) है।
संपादित
इस जवाब पर टिप्पणी के आधार पर स्पष्ट करने के लिए। मैं को एक संभावित तर्क समझाऊंगा कि String
पर कोई इटरेटर क्यों नहीं है। मैं यह कहने की कोशिश नहीं कर रहा हूं कि यह संभव नहीं है; वास्तव में मुझे लगता है कि यह CharSequence
के लिए Iterable
लागू करने के लिए समझ में आएगा।
String
CharSequence
प्रदान करता है, जो केवल अवधारणात्मक रूप से String
से अलग है। String
आमतौर पर एक इकाई के रूप में सोचा जाता है, जबकि CharSequence
बिल्कुल वैसा ही है: वर्णों का अनुक्रम। यह वर्णों के अनुक्रम पर एक इटरेटर (यानी, CharSequence
पर) होने का अर्थ होगा, लेकिन केवल String
पर ही नहीं।
रूप Foxfire ठीक ही टिप्पणी में बताया गया है, String
CharSequence
इंटरफ़ेस लागू करता है, तो टाइप के लिहाज से, एक String
एक CharSequence
है। अर्थात्, मुझे लगता है कि वे दो अलग-अलग चीजें हैं - शायद मैं यहां पेडेंटिक हूं, लेकिन जब मैं String
के बारे में सोचता हूं तो मैं आमतौर पर इसे एक इकाई के रूप में सोचता हूं जो वर्णों के साथ होता है। अंक 1, 2, 3, 4
और 1234
अंकों के अनुक्रम के बीच अंतर पर विचार करें। अब स्ट्रिंग abcd
और वर्णों के अनुक्रम a, b, c, d
के बीच अंतर पर विचार करें। मैं इस अंतर को इंगित करने की कोशिश कर रहा हूं।
मेरी राय में, पूछें कि क्यों String
में एक इटरेटर नहीं है यह पूछने की तरह है कि Integer
में एक इटरेटर क्यों नहीं है ताकि आप अलग-अलग अंकों पर फिर से सक्रिय हो सकें।
स्ट्रिंग के चार ऐरे के माध्यम से पुनरावृत्ति करने की समस्या को हल करता है? (strInput.ToCharArray) –
टिम: स्ट्रिंग # toCharArray स्ट्रिंग के पात्रों की एक प्रति के साथ एक सरणी बनाता है। यहां तक कि अगर यह काम करता है, तो यह पात्रों पर फिर से शुरू करने के लिए अनावश्यक ओवरहेड लगाता है। – jarnbjo
@jambjo 'Iterator 'कम ओवरहेड होगा ??? –