2012-12-13 17 views
9

स्ट्रिंग में \ 0 (NUL) को कैसे प्रतिस्थापित करें?जावा में विशेष वर्ण 0 {NUL}

String b = "2012yyyy06mm";    // sth what i want 
String c = "2\0\0\0012yyyy06mm"; 
String d = c.replaceAll("\\\\0", ""); // not work 
String e = d.replace("\0", "");   // er, the same 
System.out.println(c+"\n"+d+"\n"+e); 

String bb = "2012yyyy06mm"; 
System.out.println(b.length() + " > " +bb.length()); 

उपर्युक्त कोड कंसोल में 12> 11 प्रिंट करेगा। ओह, क्या हुआ?

String e = c.replace("\0", ""); 
System.out.println(e);  // just print 2(a bad character)2yyyy06mm 

उत्तर

14

आपका स्ट्रिंग "2\0\0\0012yyyy06mm"2 {NUL} {NUL} {NUL} 0 1 2 शुरू नहीं करता है, लेकिन इसके बजाय 2 {NUL} {NUL} {SOH} 2 शामिल हैं।

\001 एक भी ASCII 1 चरित्र (SOH) और नहीं एक NUL1 2 के बाद के रूप में माना जाता है।

परिणाम यह है कि केवल दो वर्ण हटा दिए जा रहे हैं, तीन नहीं।

मैं वहाँ किसी भी तरह से स्ट्रिंग अलग तोड़ कर की तुलना में एक संक्षिप्त octal escape अन्य निम्नलिखित अंक का प्रतिनिधित्व करने के लिए नहीं लगता है:

String c = "2" + "\0\0\0" + "012yyyy06mm"; 

या एकांतर, (अंतिम) में सभी तीन अंक निर्दिष्ट अष्टाधारी बचने कि इस तरह के निम्नलिखित अंक अष्टाधारी भागने का हिस्सा होने के रूप में व्याख्या नहीं कर रहे हैं:

String c = "2\000\000\000012yyyy06mm"; 

एक बार जब आप यह कर लें, "\0" अपनी लाइन के अनुसार की जगह:

String e = c.replace("\0", ""); 

सही तरीके से काम करेगा।

+0

हाय, मदद के लिए टीएलएस। स्ट्रिंग सी = "2 \ 0 \ 0 \ 0012yyyy06mm"; \t \t स्ट्रिंग ई = सी.रेप्लेस ("\ 0", ""); \t \t System.out.println (ई); \t \t \t \t // बस 22yyyy06mm – user1900556

+1

@ user1900556 हाँ प्रिंट करें, क्योंकि '001' अभी भी एम्बेडेड है (दो" 2 "के बीच) अदृश्य है। पूरा बिंदु यह है कि आपके पास मौजूद स्ट्रिंग 'सी' में वह नहीं है जो आपको लगता है कि यह करता है। – Alnitak

+0

कोई रास्ता नहीं है? यह और कैसे किया जा सकता है? – user1900556

संबंधित मुद्दे