Как использовать разделитель для уже отсканированной строки, не объявляя другой объект сканера? - PullRequest
0 голосов
/ 03 марта 2020

Для программы, которую я пишу, мне нужно прочитать введенное пользователем время в формате ЧЧ: ММ: СС АМ (или PM). Программа должна выйти, когда пользователь наберет «выйти». Я должен использовать разделитель для инициализации переменных часов, минут, секунд и AM / PM из введенной пользователем строки.

Чтобы убедиться, что пользователь не набрал «quit», я сначала прочитал в строке и выполнил стандартную проверку с использованием метода equalsIgnoreCase("quit"). Тем не менее, мне нужно иметь возможность использовать разделитель для строки, если проверка «выход» проходит. Поскольку мой первоначальный сканер считывает входные данные из потока System.in, как бы я использовал разделитель для строки, которую я уже прочитал, без создания другого объекта сканера, например: Scanner input = new Scanner(s).useDelimiter(":|\\s+");?

Мой код приведен ниже :

import java.util.Scanner;

public class Delimiter
{
    public static void main(String[] args)
    {
        int hours, minutes, seconds = 0;
        String ampm, s = "";

        Scanner scan = new Scanner(System.in);

        while (true)
        {
            s = scan.nextLine();   //scans input
            if (s.equalsIgnoreCase("quit"))  //checks if input is "quit"
            {
                System.out.println("Exiting program.");  
                return;        //exits method
            }
            else 
            {
                Scanner input = new Scanner(s).useDelimiter(":|\\s+");  //This is what I want to avoid
                hours = input.nextInt();
                minutes = input.nextInt();
                seconds = input.nextInt();
                ampm = input.nextLine().trim();
            }

            System.out.println("Hours = " + hours);
            System.out.println("Minutes = " + minutes);
            System.out.println("Seconds = " + seconds);
            System.out.println("Morning or Afternoon = " +ampm);
        }
    }
}

1 Ответ

0 голосов
/ 03 марта 2020

Как насчет этого? Помогает ли это?

import java.util.Scanner;

public class Delimiter {
    public static void main(String[] args) {
        int hours, minutes, seconds;
        String ampm;

        Scanner scan = new Scanner(System.in);

        while (true) {
            String s = scan.nextLine();
            if ("quit".equalsIgnoreCase(s))
                break;

            String[] split = s.split(":|\\s+");
            hours = Integer.parseInt(split[0]);
            minutes = Integer.parseInt(split[1]);
            seconds = Integer.parseInt(split[2]);
            ampm = split[3];
        }

        System.out.println("Exiting program.");
    }
}

Я уверен, что могут быть и другие подходы, но то, что у вас есть, тоже не выглядит так плохо. Почему вы хотите избежать второго Scanner?

...