क्या एक चरित्र को एक नल चरित्र के साथ एक स्ट्रिंग में बदलकर जावा में भी काम करता है? मुझे पता है कि '\ 0' एक सी-स्ट्रिंग को समाप्त कर देगा।
यह इस बात पर निर्भर करता है कि आप क्या काम कर रहे हैं इसे परिभाषित करते हैं। क्या यह '\0'
के साथ लक्षित चरित्र की सभी घटनाओं को प्रतिस्थापित करता है? पूर्ण रूप से!
String s = "food".replace('o', '\0');
System.out.println(s.indexOf('\0')); // "1"
System.out.println(s.indexOf('d')); // "3"
System.out.println(s.length()); // "4"
System.out.println(s.hashCode() == 'f'*31*31*31 + 'd'); // "true"
सबकुछ मेरे लिए ठीक काम करता प्रतीत होता है! indexOf
इसे पा सकते हैं, यह लंबाई के हिस्से के रूप में गिना जाता है, और हैश कोड गणना के लिए इसका मान 0 है; सब कुछ जेएलएस/एपीआई द्वारा निर्दिष्ट है।
यह काम नहीं करता है यदि आप किसी चरित्र को नल चरित्र के साथ बदलने की अपेक्षा करते हैं तो किसी भी तरह से स्ट्रिंग से उस चरित्र को हटा देगा। बेशक यह इस तरह काम नहीं करता है। एक शून्य चरित्र अभी भी एक चरित्र है!
String s = Character.toString('\0');
System.out.println(s.length()); // "1"
assert s.charAt(0) == 0;
यह भी नहीं काम करता है अगर तुम अशक्त चरित्र एक स्ट्रिंग को समाप्त करने की उम्मीद है।यह ऊपर के टुकड़े से स्पष्ट है, लेकिन यह भी स्पष्ट रूप से JLS में निर्दिष्ट है (10.9. An Array of Characters is Not a String):
जावा प्रोग्रामिंग भाषा में, सी के विपरीत, char
की एक सरणी नहीं है एक String
, और न तो एक String
है और न ही की एक सरणी char
'\ u0000' (एनयूएल चरित्र) द्वारा समाप्त किया गया है।
इस अजीब पात्रों को दोषी होगा?
अब हम एक पूरी तरह से अलग चीज़ के बारे में बात कर रहे हैं, यानी स्क्रीन पर स्ट्रिंग कैसे प्रदान की जाती है। सच है, यहां तक कि "हैलो दुनिया!" यदि आप डिंगबैट फ़ॉन्ट का उपयोग करते हैं तो फंकी लगेंगे। एक यूनिकोड स्ट्रिंग एक लोकेल में फंकी लग सकती है लेकिन दूसरी नहीं। यहां तक कि एक सही ढंग से प्रस्तुत यूनिकोड स्ट्रिंग, जिसमें चीनी वर्ण भी शामिल हैं, अभी भी ग्रीनलैंड के किसी से कहने के लिए मजेदार दिख सकते हैं।
उस ने कहा, शून्य चरित्र शायद फंकी दिखता है; आमतौर पर यह एक ऐसा चरित्र नहीं है जिसे आप प्रदर्शित करना चाहते हैं। उस ने कहा, चूंकि शून्य चरित्र स्ट्रिंग टर्मिनेटर नहीं है, इसलिए जावा इसे एक या दूसरे तरीके से संभालने में सक्षम है।
अब क्या हम यह मान इच्छित प्रभाव है, यानी एक स्ट्रिंग से सभी अवधि को दूर है पता करने के लिए, सबसे आसान समाधान replace(CharSequence, CharSequence)
अधिभार उपयोग करने के लिए है।
System.out.println("A.E.I.O.U".replace(".", "")); // AEIOU
replaceAll
समाधान यहाँ भी उल्लेख किया गया है, लेकिन वह नियमित अभिव्यक्ति है, जिसके कारण आप डॉट मेटा चरित्र से बचने के लिए की जरूरत है, और धीमी होने की संभावना है के साथ काम करता है।
"मैंने कुछ जेएसपी पृष्ठों को फंकी गैर-असीसी वर्णों को मुद्रित किया है।": इस समस्या का मूल कारण पूरी तरह से कहीं और है। Google "मोजिबैक"। – BalusC