Спросите пользователя о команде, включая путаницу имени файла - PullRequest
0 голосов
/ 31 октября 2018

В этой части моей программы я прошу пользователя ввести команду и имя файла. Командой может быть «read», «content» или «count». Во всех разных задачах мне нужен файл. Я хочу, чтобы пользователь набрал в консоли что-то вроде:

read Alice's Adventures In Wonderland.txt

Почему-то я не понимаю, как реализовать это в 1 команде. Теперь я сначала спрашиваю имя файла, а потом спрашиваю, что с ним делать. В следующем примере приведена команда read, которая запрашивает файл и считает все слова в файле:

case "read":
            int nrWords=countAllWords();
            System.out.println("The number of words in this file is: "+nrWords+"\n");
            break;

.

 private static int countAllWords() throws IOException
  {
    Scanner input=new Scanner(System.in);
    System.out.println("Please enter file name: ");
    String fileName=input.nextLine();

    FileInputStream inputStream=new FileInputStream(fileName);
    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
    String line=bufferedReader.readLine();
    int nrWords=0;

    while(line!=null)
    {
      String[] wordsInLine=line.split(" ");
      nrWords=nrWords+wordsInLine.length;
      line=bufferedReader.readLine();
    }
    return nrWords;
  }

Может кто-нибудь объяснить, как я могу объединить эти две команды в одно предложение, в котором мой код понимает, что к чему относится?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Если вы получаете всю команду за один вход, вы можете разобрать первое слово - понимая, что это «действие», а затем остальное - имя файла.

Итак, сначала вы получите всю команду:

Scanner input=new Scanner(System.in);
System.out.println("Please enter command: ");
String command = input.nextLine();

Тогда вам захочется разобраться в действии. Это всегда будет первое слово.

String action = command.substring(0, command.indexOf(' ')).trim();
String fileName = command.substring(command.indexOf(' ')).trim();

Теперь вы можете проверить, что это за действие, и использовать файл по мере необходимости.

Метод String indexOf вернет индекс первого вхождения указанного символа. Так что в этом случае мы используем его, чтобы получить индекс первого пробела. Обратите внимание, что indexOf вернет -1, если символ отсутствует, поэтому вы захотите отловить его соответствующим образом. (Пример сценария: пользователь просто вводит «read» без имени файла.)

0 голосов
/ 31 октября 2018

Вместо этого вы можете использовать функцию split для разделения вашей команды следующим образом:

String line = bufferedReader.readLine();
String command = line.split(" ")[0];
String fileName = line.substring(command.length);

И таким образом, ваше fileName будет остальной частью String, а команда - только первым элементом. command должна быть командой, а fileName - именем файла.

...