2010-07-25 4 views
11

इस प्रकार मैं सिर्फ बैकस्पेस भागने का परीक्षण किया:जावा बैकस्पेस बचने

System.out.println("Hello\b"); 

मैं उत्पादन मिलने की उम्मीद: नरक
लेकिन यह था: "हैलो" एक वर्ग ब्लॉक

किसी को भी जानता है कि कैसे साथ जावा इसे संभालते हैं?

उत्तर

18

जावा उस चरित्र को 'संभाल' नहीं देता है। यह सब एक बाइट स्ट्रीम है जिसके बारे में ओएस कहता है कि यह बाइट लिख सकता है, और यह एएससीआईआई बैकस्पेस सहित खुशी से बाइट लिख देगा।

होता है जब स्ट्रीम प्राप्त करता है कि उस चरित्र के पास जावा के साथ कुछ भी नहीं है, यह पूरी तरह से टर्मिनल-निर्भर है। कुछ टर्मिनल पिछले चरित्र को मिटा देंगे, कुछ बैकस्पेस चरित्र को कुछ अजीब ग्लिफ के रूप में प्रदर्शित करेंगे, या यहां तक ​​कि एक विशेष "बैकस्पेस कैरेक्टर" ग्लिफ के रूप में भी प्रदर्शित होंगे। कुछ चरित्र को पूरी तरह से छोड़ सकते हैं अगर वे इसकी व्याख्या नहीं कर सकते हैं, अन्य (अधिकांश टर्मिनल अनुकरणकर्ता, वास्तव में) वे कॉन्फ़िगर किए गए तरीके के आधार पर अलग-अलग व्यवहार करेंगे। लेकिन इन सभी के पास जावा के साथ कुछ लेना देना नहीं है, वे इस तरह से व्यवहार करेंगे कि वे जावा या पर्ल print या सी ++ cout या जो भी कुछ भी हैं।

2

यह विंडोज कमांड कंसोल में पूरी तरह से ठीक काम करना चाहिए। यह बग ग्रहण बग के रूप में पहचाने जाने योग्य है: bug 76936। यह भी देखें How to get backspace \b to work in Eclipse’s console?

+0

धन्यवाद, लेकिन यह अभी भी खिड़कियों कंसोल में काम नहीं किया और साथ ही। क्या आपने इसे अपनी मशीन पर आज़माया था। शायद यह मेरी प्रणाली की समस्या है। – Alfred

+0

मैंने विंडोज कंसोल में \ r का उपयोग किया है (लाइन फीड के बिना कैरिज रिटर्न) और यह ठीक काम करता है। मैं इसे "प्रसंस्करण एनएन%" chaging टेक्स्ट दिखाने के लिए उपयोग करता हूं। – helios

-4

आप System.out.println उपयोग कर रहे हैं ("...") जो अनिवार्य रूप से System.out.print है ("... \ n")

.println का प्रयोग न करें, आप केवल नई लाइन को हटा रहे हैं ...

+1

उस मामले में println ("हैलो \ b") "हैलो \ b \ n" नहीं "हैलो \ n \ b" उत्सर्जित करेगा। और वह ग्लिफ की व्याख्या नहीं करता है। – helios

5

अपना वांछित आउटपुट यानी Hell प्राप्त करने के लिए आपको \b के बाद space वर्ण जोड़ने की आवश्यकता है। क्योंकि \b केवल कर्सर (वर्चुअल) को 1 स्थिति पीछे ले जाएगा, लेकिन यह इसे हटा नहीं देगा। आप जो कुछ कर सकते हैं वह space द्वारा हटाए जाने वाले चरित्र को प्रतिस्थापित कर सकता है। इस प्रकार आउटपुट के रूप में Hell प्राप्त करने के लिए निम्न पंक्ति का प्रयास करें:

System.out.println("Hello\b "); 

पुनश्च: यह समाधान विंडोज ओएस और Ubuntu ओएस पर काम करता है। अन्य ओएस के लिए यह उपरोक्त @ किलियन फोथ द्वारा समझाया गया है।

+2

यह प्रिंट मेरे लिए हैलो (+ व्हाइटस्पेस) ... – tilpner

+1

@StackOverflowException - आपके आउटपुट का कारण पहले से ही किलियन फोथ द्वारा समझाया गया है। आपका ओएस विंडोज और उबंटू से अलग होना चाहिए। –

+0

धन्यवाद; यह मेरे लिए काम किया (मछली खोल का उपयोग कर)। – Arman

-2

अपनी कक्षा फ़ाइल निष्पादित करने के लिए टर्मिनल का उपयोग करने का प्रयास करें।

java classname 

जब आईडीई निष्पादित \ b, यह स्वचालित रूप से इसे अनदेखा कर देगा। क्योंकि आईडीई में चलाने के लिए कोई संबंधित लाइब्रेरी नहीं है \ b। हालांकि, यदि आप उन्हें टर्मिनल में चलाते हैं, तो इसे निष्पादित किया जा सकता है। सभी टर्मिनलों में वह पुस्तकालय है।

-3

आप एक समारोह लिखने के लिए यह करने के लिए चाहते हो सकता है:

def static public String backspace (String str){ 
    return str.substring(0,str.length-1) 
} 
संबंधित मुद्दे