Java useDelimiter и nextLine - PullRequest
       19

Java useDelimiter и nextLine

0 голосов
/ 15 февраля 2020

Я пытаюсь создать программу, которая разделяет строковый ввод (windows путь), используя разделитель. Однако моя программа, похоже, игнорирует разделитель.

Результат, который я ожидаю:

Skriv in sökvägen: C://Windows/System/

C

Windows

System

Результат, который я получаю:

Skriv in sökvägen: C://Windows/System/

C://Windows/System/

Чего мне не хватает в код ниже?

import java.util.Scanner; 

public class Sokvagen 
{

   public static void main(String[] args) 

   {

      //String representing pathway
      String sokvag;

      //Creating scanner object for reading from input stream 
      Scanner userInput = new Scanner(System.in);

      // Set delimiter to ':' or '/' or whitespace
      userInput.useDelimiter("[:/\\s]+"); 

      // Instructions to the user to type a windows patway ex: C://Windows/System/
      System.out.print("Skriv in sökvägen: ");

      //Input
      sokvag = userInput.nextLine();

      //Print the result
      System.out.println(sokvag);

      userInput.close();  
   }   
}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я понял, что должен был использовать 3 строки и использовать следующую, и все работало просто отлично.

  //String representing pathway
  String sokvag1, sokvag2, sokvag3;

  //Creating scanner object for reading from input stream 
  Scanner userInput = new Scanner(System.in);

  // Set delimiter to ':' or '/' or whitespace
  userInput.useDelimiter("[:/\\s]+"); 

  // Instructions to the user to type a windows patway ex: C://Windows/System/
  System.out.print("Skriv in sökvägen: ");

  //Input
  sokvag1 = userInput.next();
  sokvag2 = userInput.next();
  sokvag2 = userInput.next();

  //Print the result
  System.out.println(sokvag1);
  System.out.println(sokvag2);
  System.out.println(sokvag3);

  userInput.close();  
0 голосов
/ 15 февраля 2020

userInput.nextLine() всегда возвращает всю строку одним куском, а userInput.next() возвращает токен, используя ваш разделитель. Но тогда вам нужно прочитать входные данные в токене al oop по токену до ...

import java.util.Arrays;
import java.util.Scanner;

public class Main
{

    public static void main(String[] args) throws Exception
    {
        String sokvag;

        //Creating scanner object for reading from input stream
        Scanner userInput = new Scanner(System.in);

        // Set delimiter to ':' or '/' or whitespace
        userInput.useDelimiter("[:/\\s]+");

        // Instructions to the user to type a windows patway ex: C://Windows/System/
        System.out.print("Skriv in sökvägen: ");

        do
        {
            //Input
            sokvag = userInput.next();

            //Print the result
            System.out.println(sokvag);
        }
        while (????);

        userInput.close();
    }
}

Проблема в том, что вы не знаете, когда пользователь ввел последний токен (последнюю часть пути ).

Так что лучше продолжайте читать весь ввод одной строкой, а затем разбивайте его на части. Например:

import java.util.Arrays;
import java.util.Scanner;

public class Main
{

    public static void main(String[] args) throws Exception
    {
        String sokvag;

        //Creating scanner object for reading from input stream
        Scanner userInput = new Scanner(System.in);

        // Instructions to the user to type a windows patway ex: C://Windows/System/
        System.out.print("Skriv in sökvägen: ");

        //Input
        sokvag = userInput.nextLine();
        String[] parts = sokvag.split("[:/\\s]+");

        //Print the result
        System.out.println(Arrays.toString(parts));

        userInput.close();
    }
}

Конечно, вы также можете перебирать массив частей для вывода содержимого строки построчно.

...