software - java verify




मैं एक ही पंक्ति में कैसे प्रिंट कर सकता हूं? (4)

अपडेटेड प्रोग्रेस बार प्रिंट करने से पहले लाइन को हटाने के लिए आप जितनी बार आवश्यक हो सके बैकस्पेस कैरेक्टर 'बी' प्रिंट कर सकते हैं।

मैं एक प्रगति पट्टी मुद्रित करना चाहता हूं:

[#                    ] 1%
[##                   ] 10%
[##########           ] 50%

लेकिन इन्हें सभी को एक नए लाइन के बजाय टर्मिनल में एक ही पंक्ति में मुद्रित किया जाना चाहिए। मेरा मतलब यह है कि प्रत्येक नई लाइन को पिछले स्थान को प्रतिस्थापित करना चाहिए, यह println() बजाय print() का उपयोग print() बारे में नहीं है।

मैं जावा में ऐसा कैसे कर सकता हूं?


अपनी स्ट्रिंग को इस प्रकार प्रारूपित करें:

[#                    ] 1%\r

\r चरित्र नोट करें। यह तथाकथित कैरिज रिटर्न है जो कर्सर को लाइन की शुरुआत में वापस ले जायेगी।

अंत में, सुनिश्चित करें कि आप उपयोग करते हैं

System.out.print()

और नहीं

System.out.println()

सबसे पहले, मैं इस सवाल को वापस लाने के लिए क्षमा चाहता हूं, लेकिन मुझे लगा कि यह एक और जवाब का उपयोग कर सकता है।

डेरेक Schultz सही तरह का है। '\ B' चरित्र प्रिंटिंग कर्सर को एक वर्ण पीछे ले जाता है, जिससे आप उस प्रिंटर को ओवरराइट कर सकते हैं जो वहां मुद्रित था (यह पूरी लाइन या यहां तक ​​कि उस चरित्र को तब तक नहीं हटाता जब तक आप शीर्ष पर नई जानकारी प्रिंट नहीं करते)। निम्नलिखित जावा का उपयोग कर प्रगति पट्टी का एक उदाहरण है, हालांकि यह आपके प्रारूप का पालन नहीं करता है, यह दिखाता है कि ओवरराइटिंग वर्णों की मूल समस्या को कैसे हल किया जाए (यह केवल 32-बिट मशीन पर ओरेकल के जावा 7 के साथ उबंटू 12.04 में परीक्षण किया गया है, लेकिन यह सभी जावा सिस्टम पर काम करना चाहिए):

public class BackSpaceCharacterTest
{
    // the exception comes from the use of accessing the main thread
    public static void main(String[] args) throws InterruptedException
    {
        /*
            Notice the user of print as opposed to println:
            the '\b' char cannot go over the new line char.
        */
        System.out.print("Start[          ]");
        System.out.flush(); // the flush method prints it to the screen

        // 11 '\b' chars: 1 for the ']', the rest are for the spaces
        System.out.print("\b\b\b\b\b\b\b\b\b\b\b");
        System.out.flush();
        Thread.sleep(500); // just to make it easy to see the changes

        for(int i = 0; i < 10; i++)
        {
            System.out.print("."); //overwrites a space
            System.out.flush();
            Thread.sleep(100);
        }

        System.out.print("] Done\n"); //overwrites the ']' + adds chars
        System.out.flush();
    }
}

package org.surthi.tutorial.concurrency;

public class IncrementalPrintingSystem {
    public static void main(String...args) {
        new Thread(()-> {
           int i = 0;
           while(i++ < 100) {
               System.out.print("[");
               int j=0;
               while(j++<i){
                  System.out.print("#");
               }
               while(j++<100){
                  System.out.print(" ");
               }
               System.out.print("] : "+ i+"%");
               try {
                  Thread.sleep(1000l);
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
               System.out.print("\r");
           }
        }).start();
    }
}




java