كيفية التقاط إدخال فارغة مع الطبقة الماسح الضوئي في جافا

StackOverflow https://stackoverflow.com/questions/1737816

سؤال

وأنا باستخدام فئة الماسح الضوئي لإدخال المستخدم التقاط من سطر الأوامر (سلاسل فقط)، وذلك كبديل لتقريري السابق <لأ href = "https://stackoverflow.com/questions/1737611/proper-way-to -اقرأ المستخدم المدخلات-من-سطر الأوامر في وجافا "> السؤال .

وفيما يلي يبدو أن تعمل بشكل جيد، إلا لم يتم القبض على أسطر فارغة كما يجب من قبل الشرطي الثاني. على سبيل المثال عندما كنت اضغط مفتاح الإدخال، وهذا ينبغي أن يتم القبض كما سطر فارغ ويجب أن يكون مشروطا الثاني صحيح. ومع ذلك يتم عرض سطر فارغ جديد في كل مرة وحدة التحكم، مع وحدة كاملة "التمرير" أعلى إذا أظل ضرب دخول، بدلا من المنطق في مشروطة.

هل هناك وسيلة مناسبة للقبض على إدخال فارغة من سطر الأوامر باستخدام الماسح الضوئي؟ (شخص ما ضرب فقط أدخل أو الفضاء ضرب عدة مرات ثم أدخل)

وشكرا لك على أي نصيحة

Machine aMachine = new Machine();
String select;
Scanner br = new Scanner(System.in); 
 while(aMachine.stillInUse()){
  select = br.next();
        if (Pattern.matches("[rqRQ1-6]", select.trim())) {
        aMachine.getCommand(select.trim().toUpperCase()).execute(aMachine);
        }
        /*
         * Ignore blank input lines and simply
         * redisplay current status -- Scanner doesn't catch this
         */
        else if(select.trim().isEmpty()){
        aMachine.getStatus();

        /*
         * Everything else is treated
         * as an invalid command
         */
    else {                
            System.out.println(aMachine.badCommand()+select);
            aMachine.getStatus();
        }
    }
هل كانت مفيدة؟

المحلول

وScanner هو التنفيذ "للدمى" من ملف I / O للإدخال. انها تسمح الكتاب التعليمي والكتب المدرسية لكتابة عرض التعليمات البرمجية بدون يئن حول مضاعفات ذلك.

إذا كنت تريد حقا أن تعرف ما كنت تقرأ، عليك أن تقول شيئا مثل

BufferedReader br = new BufferedReader(new FileReader("myfile.txt"))

و... وبعد ذلك يمكنك أن تفعل

String line = br.readLine()

ويرى شيء غير الحقيقة.

نصائح أخرى

وحدد = br.next ()؛

... كتل حتى يجد رمزية مناسبة. وهذا يعني أنه سينتظر حتى يرى رمز للعودة، وبالتالي فإنك لن تحصل على خط الظهر فارغة من ذلك.

وحاول استبدال هذه الخطوط:

//select = br.next();    // old version with Scanner

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
try {
  select = bufferedReader.readLine();
} catch (IOException e) {
  throw new RuntimeException(e);
}
System.out.println(">" + select + "<"); // should be able to see empty lines now...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top