मैं एक एंड्रॉइड ऐप प्रोग्राम कर रहा हूं, और अपने प्रोग्राम को एक फ़ाइल की यादृच्छिक रेखा पढ़ने के लिए चाहूंगा। मुझसे यह कैसे होगा?जावा - रैंडम लाइन
उत्तर
कि ऐसा करने के लिए, आप और की जरूरत है या तो निश्चित लंबाई लाइनों (कार्यान्वयन विवरण उस मामले में स्पष्ट होना चाहिए) या के बारे में कितने लाइनों देखते हैं जानकारी (वैकल्पिक रूप से, बेहतर प्रदर्शन के लिए) के अंदर क्या ऑफसेट पर वे फ़ाइल शुरू करते हैं (प्रकार की एक सूचकांक)।
छोटी फ़ाइलों के लिए, जब भी आपको यादृच्छिक रेखा की आवश्यकता होती है तो आप मांग पर ऐसी अनुक्रमणिका बना सकते हैं। बड़ी फ़ाइलों के लिए इसे कुशलता से करने के लिए, आपको एक अलग फ़ाइल में, सूचकांक को लगातार जारी रखने की आवश्यकता है।
यदि रेखाएं लगभग समान लंबाई होती हैं और आपको सही "यादृच्छिकता" की आवश्यकता नहीं होती है, तो आप फ़ाइल के अंदर एक यादृच्छिक बाइट ऑफसेट भी चुन सकते हैं और निकटतम लाइन ब्रेक के लिए स्कैन कर सकते हैं।
आप जो चाहते हैं वह LineNumberReader
है।
आप फ़ाइल में यादृच्छिक स्थिति में जाने के लिए विधि setLineNumber()
का उपयोग कर सकते हैं।
LineNumberReader rdr;
int numLines;
Random r = new Random();
rdr.setLineNumber(r.nextInt(numLines));
String theLine = rdr.readLine();
+1 याद। यह देने के बारे में एक बेहतर जवाब है। मुझे नहीं पता था कि कक्षा मौजूद थी। – McStretch
@McStretch, धन्यवाद। इस तरह के ऑपरेशन के लिए कक्षा बहुत उपयोगी है। (लेकिन आमतौर पर उपयोग करने के लिए बेहतर कक्षाएं होती हैं) – jjnguy
यह निश्चित रूप से काम करता है लेकिन आपको वास्तव में यह ध्यान रखना होगा कि प्रत्येक पंक्ति पढ़ने का मतलब फ़ाइल की शुरुआत और उस पंक्ति के बीच सभी पंक्तियों को पढ़ना है। –
एक यादृच्छिक संख्या प्राप्त करने के लिए आप उपयोग पैकेज से जावा की Random
कक्षा का उपयोग कर सकते हैं।
Random rnd = new Random();
int nextRandomLineNumber = rnd.nextInt();
http://developer.android.com/reference/java/util/Random.html
एकमात्र समस्या जो मैं देखता हूं इसके साथ है: 'रैंडम() ' – Wallter
के लिए कोई सीमा निर्धारित नहीं है आप अन्य अगली INT() विधि, nextInt (int n) का उपयोग करके सीमा निर्धारित करेंगे:" एक छद्म यादृच्छिकता देता है, समान रूप से वितरित int मान 0 के बीच (समावेशी) और निर्दिष्ट मूल्य (अनन्य), इस यादृच्छिक संख्या जनरेटर के अनुक्रम से खींचा गया। " – McStretch
हाँ, मैं बस उसे उस वर्ग को दिखाना चाहता था, जिसके बाद अगला (int x) वह 0 और x के बीच एक int प्राप्त करेगा। जब मैंने अपनी पोस्ट समाप्त की, तो पहला जवाब पहले से ही सही किया गया था (पहले केवल थ्री यादृच्छिक वस्तु के बिना setLineNumber के बारे में टिप्पणी थी) – Lars
एक पुराने जमाने जवाब देखें: तुम वापस एक अशक्त मिलता है, बस विधि
BufferedReader br = new BufferedReader(file);
Random rng = new Random (8732467834324L);
String s = br.readLine();
for (; s != null ; s = br.readLine())
if (rng.nextDouble() < 0.2)
break;
br.close();
return s;
- 1. जावा जेनरेट रैंडम नंबर {-1,0,1}
- 2. जावा रैंडम नंबर एक बीज का उपयोग
- 3. जावा: एक अंतराल में रैंडम लंबे मूल्य
- 4. रैंडम तत्व
- 5. `रैंडम` ऑब्जेक्ट
- 6. सीएसवी रैंडम एक्सेस; सी #
- 7. क्रैपी रैंडम नंबर जेनरेटर
- 8. रैंडम स्तंभ कैसेंड्रा
- 9. रैंडम भारित पसंद
- 10. हास्केल रैंडम जनरेशन
- 11. रैंडम ऑब्जेक्ट सी #
- 12. रैंडम भारित पसंद
- 13. एसक्यूएल सर्वर रैंडम सॉर्ट
- 14. अजगर रैंडम स्लाइस मुहावरा
- 15. Mysql 1 रैंडम पंक्ति
- 16. मजबूत रैंडम नंबर जनरेशन
- 17. वितरित रैंडम नंबर जनरेशन
- 18. फास्ट रैंडम जेनरेटर
- 19. सशर्त रैंडम फ़ील्ड्स
- 20. रैंडम नाव संख्या
- 21. जावास्क्रिप्ट रैंडम इंटीजर दो नंबर
- 22. जावा कमांड लाइन प्रोग्राम
- 23. जावा: एक नई लाइन
- 24. जावा --version कमांड लाइन
- 25. जावा कमांड लाइन तर्क
- 26. जावा कमांड लाइन तर्क
- 27. ग्रहण कमांड लाइन जावा
- 28. जावा: कमांड लाइन
- 29. सिस्टम में बग। रैंडम कन्स्ट्रक्टर?
- 30. रैंडम अजगर शब्दकोश कुंजी, मूल्यों
यह वास्तव में मेरी योजना थी। क्या आप मुझे और जानकारी दे सकते हैं कि लाइनों को निश्चित लंबाई क्यों तय की जानी चाहिए? मेरे पास सिर्फ एक 'होगा।txt' फ़ाइल (या .bin जो भी हो)। – Wallter
@ वाल्टर: यदि रेखाओं में एन बाइट्स की निश्चित लंबाई है (एन्कोडिंग समस्याएं सावधान रहें!) और फ़ाइल आकार एस है, तो एस/एन लाइनें हैं और लाइन नंबर एक्स बाइट ऑफसेट एक्स * एन पर शुरू होता है। एक फ़ाइल में दिए गए बाइट ऑफ़सेट पर कूदना आसान और कुशल दोनों है। –
@ माइकल: यह समझ में आता है - हालांकि यह इसके लायक से अधिक काम की तरह लगता है, अगर आपके पास केवल एक समारोह था जो दीक्षा में भाग गया था (या फ़ाइल में पहली पंक्ति में लाइनों की संख्या है) – Wallter