प्रिंटफ 1.5 रिलीज के साथ जावा में जोड़ा गया है, लेकिन मुझे लगता है कि फ़ाइल को एक स्ट्रिंग में आउटपुट को भेजने के लिए नहीं लगता है (जो सी में स्प्रिंटफ करता है)। क्या किसी को भी यह करना आता है?जावा में स्पिंटफ समतुल्य
उत्तर
@erickson देखें।
स्ट्रिंग्स अपरिवर्तनीय प्रकार हैं। आप उन्हें संशोधित नहीं कर सकते हैं, केवल नए स्ट्रिंग उदाहरण लौटाएं।
इस कारण से, "foo" .format() थोड़ा समझ में आता है, के रूप में यह
string newString = "foo".format();
मूल जावा लेखक (और .NET लेखक) की तरह कहा जा करने के लिए होगा, यह तय किया कि एक स्थिर विधि इस स्थिति में अधिक समझ में आया, क्योंकि आप "foo" को संशोधित नहीं कर रहे हैं, बल्कि एक प्रारूप विधि को कॉल करने और इनपुट स्ट्रिंग में गुजरने के बजाय।
EDIT: हे, यह साइट कभी-कभी बहुत मनोरंजक हो सकती है। मैं इस तथ्य का जिक्र करने के लिए नीचे उतर गया कि तार अपरिवर्तनीय प्रकार हैं।
यहां एक उदाहरण है कि प्रारूप() एक उदाहरण विधि के रूप में गूंगा क्यों होगा। .NET (और शायद जावा में) में, बदलें() एक उदाहरण विधि है।
आप ऐसा कर सकते हैं:
"I Like Wine".Replace("Wine","Beer");
हालांकि, कुछ नहीं होता है, क्योंकि तार अपरिवर्तनीय हैं। बदलें एक नई स्ट्रिंग को वापस करने की कोशिश करता है, लेकिन इसे कुछ भी नहीं सौंपा गया है।
इस तरह आम रूकी गलतियों के बहुत सारे कारण बनता है:
inputText = inputText.Replace(" ","%20");
अब, अगर आप समझते हैं कि तार अपरिवर्तनीय हैं, कि बनाता है:
// Contrived Example
inputText.Replace(" ","%20");
फिर, कुछ नहीं होता, इसके बजाय आप क्या करना है सटीक भावना। यदि आप नहीं करते हैं, तो आप बस उलझन में हैं। बदलें के लिए उचित जगह, होगा जहां स्वरूप है, स्ट्रिंग की एक स्थिर पद्धति के रूप में:
inputText = String.Replace(inputText," ", "%20");
अब चल रहा क्या करने के लिए के रूप में कोई सवाल ही नहीं है।
असली सवाल यह है कि, इन ढांचे के लेखकों ने फैसला क्यों किया कि एक उदाहरण विधि होनी चाहिए, और अन्य स्थैतिक? मेरी राय में, दोनों स्थिर तरीके से अधिक स्पष्ट रूप से व्यक्त किए जाते हैं, लेकिन एरिक्सन को लगता है कि दोनों उदाहरण विधियों के रूप में हैं।
आपकी राय के बावजूद, सच्चाई यह है कि आप स्थैतिक संस्करण का उपयोग करके गलती करने के लिए कम प्रवण हैं, और कोड को समझना आसान है (कोई छुपा गॉटचास नहीं)।
बेशक वहाँ कुछ तरीके कि उदाहरण के तरीके के रूप में बिल्कुल सही हैं, String.Length ले()
int length = "123".Length();
इस स्थिति में, इसके स्पष्ट हम "123" संशोधित करने के लिए प्रयास नहीं कर रहे है, हम बस यह निरीक्षण , और इसकी लंबाई वापस कर रहा है ... यह एक उदाहरण विधि के लिए एक आदर्श उम्मीदवार है।अपरिवर्तनीय वस्तुओं पर उदाहरण के तरीके के लिए
मेरे सरल नियमों:
- आप एक ही प्रकार का एक नया उदाहरण वापस जाने के लिए की जरूरत है, एक स्थिर विधि का उपयोग करें।
- अन्यथा, एक उदाहरण विधि का उपयोग करें।
दोनों समाधान printf अनुकरण है, लेकिन एक अलग तरीके से workto।
format()
साथ,
sprintf()
के सबसे करीब:final static String HexChars = "abcdef"; public static String getHexQuad(long v) { String ret; if(v > 0xffff) ret = getHexQuad(v >> 16); else ret = ""; ret += String.format("%c%c%c%c", HexChars.charAt((int) ((v >> 12) & 0x0f)), HexChars.charAt((int) ((v >> 8) & 0x0f)), HexChars.charAt((int) ((v >> 4) & 0x0f)), HexChars.charAt((int) (v & 0x0f))); return ret; }
replace(char oldchar , char newchar)
साथ, कुछ हद तक तेजी से लेकिन बहुत सीमित उदाहरण के लिए, एक हेक्स स्ट्रिंग के लिए एक मूल्य कन्वर्ट करने के लिए, आप 2 निम्नलिखित समाधान है :
... ret += "ABCD". replace('A', HexChars.charAt((int) ((v >> 12) & 0x0f))). replace('B', HexChars.charAt((int) ((v >> 8) & 0x0f))). replace('C', HexChars.charAt((int) ((v >> 4) & 0x0f))). replace('D', HexChars.charAt((int) (v & 0x0f))); ...
एक तीसरा समाधान है जिसमें केवल विज्ञापन शामिल है डिंग एक करके
ret
एक करने के लिए चार ऐसे में के रूप में (चार नंबर होते हैं जो एक दूसरे को में जोड़ने कर रहे हैं!):... ret += HexChars.charAt((int) ((v >> 12) & 0x0f))); ret += HexChars.charAt((int) ((v >> 8) & 0x0f))); ...
... लेकिन यह है कि वास्तव में बदसूरत होगी।
सभी महान विचारों, लेकिन अपने सहकर्मी के लिए समझने के लिए लिखने-ही असंभव कोड में अपने कोड बदल जाता है। – Ben
- 1. जावा में फ़ाइल.सेपरेटर के समतुल्य सी # समतुल्य है
- 2. जावा मानचित्र समतुल्य सी #
- 3. प्रतिबिंब के जावा समतुल्य।
- 4. आवेदन। डॉवेंट्स() -> जावा में समतुल्य फ़ंक्शन?
- 5. सी ++ में जावा इंटरफेस के समतुल्य?
- 6. एनएस सर्विसबस जावा दुनिया में समतुल्य
- 7. जावा में समतुल्य एएसपी.नेट मास्टर पेज
- 8. जावा में सी # पर्यवेक्षण चयन का समतुल्य
- 9. जावा में std :: वेक्टर के समतुल्य?
- 10. जावा इनवेरिएंट संस्कृति के समतुल्य
- 11. जावा के लिए Yacc समतुल्य
- 12. सी # जावा संसाधन के समतुल्य
- 13. सी 11 में समतुल्य() समतुल्य क्या है?
- 14. मर्क एलएस-फाइलों के समतुल्य में समतुल्य?
- 15. जावा में लोकेल के समतुल्य सी # में संस्कृति है?
- 16. रूबी में कक्षा विधि (जावा में स्थिर के समतुल्य)
- 17. ग्रहण के लिए GhostDoc समतुल्य (जावा)
- 18. जावा सिस्टम के बाहर विजुअल स्टूडियो समतुल्य
- 19. जावा समतुल्य .NET के स्ट्रिंग। Format
- 20. क्या LINQ के लिए जावा समतुल्य है?
- 21. सी # जावा के अपवाद के समतुल्य .printStackTrace()?
- 22. जावा में सी # एनम ध्वज विशेषता के समतुल्य?
- 23. जावा में .NET के वेब क्लाइंट और HttpWebRequest की समतुल्य?
- 24. जावा में स्ट्रिंगबफर के .NET समतुल्य क्या है?
- 25. जावा में पाइथन के लैम्ब्डा कार्यों के लिए समतुल्य?
- 26. क्या php में जावा सेट का समतुल्य है?
- 27. क्या जावा में एक कॉन्स संदर्भ समतुल्य है?
- 28. जावा में @Deprecated के .NET समतुल्य क्या है?
- 29. जावा में PHP के क्रिप्ट फ़ंक्शन के समतुल्य
- 30. एकता में समतुल्य रजिस्ट्री
मुझे लगता है कि आप किसी भी तरह आप विचार मैं सुझाव दे रहा था प्रारूप स्ट्रिंग संशोधित किया जाना था मिल गया। मैंने इस संभावना को कभी नहीं माना कि कोई स्ट्रिंग को बदलने की उम्मीद कर सकता है, क्योंकि उनकी अपरिवर्तनीयता इतनी मौलिक है। – erickson
प्रारूप स्ट्रिंग के रूप में देखकर आमतौर पर "कीमत% 4d" की तरह अधिक होती है, और "% 4d" नहीं, मैं अभी भी भ्रम के लिए बहुत सी संभावनाएं देखता हूं। स्थिर तरीकों के खिलाफ आपके पास क्या है? :) – FlySwat
इस उत्तर में सवाल के साथ कुछ भी नहीं है। –