Как читать целочисленные входные данные, разделенные запятыми, в java

#java

#java #java.util.scanner #разделитель

Вопрос:

 import java.io.*;
import java.util.*;
class usingDelimiters
{
    public static void main(String args[])
    {
        Scanner dis=new Scanner(System.in);
        int a,b,c;
        a=dis.nextInt();
        b=dis.nextInt();
        c=dis.nextInt();
        System.out.println("a=" a);
        System.out.println("b=" b);
        System.out.println("c=" c);
    }
}
 

Эта программа работает нормально, когда мои входные данные равны 1 2 3 (разделены пробелом)
Но как изменить мою программу, если мои входные данные равны 1,2,3 (разделены запятыми)

Комментарии:

1. целые числа, разделенные запятыми == значения, разделенные запятыми == CSV == использовать OpenCSV? Вручную нормально, если это игрушечный код, но для серьезной работы рассмотрите возможность использования OpenCSV.

Ответ №1:

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

Например:

 dis.useDelimiter("\D");
 

useDelimiter Метод принимает a Pattern или String представление a Pattern .

Полный пример:

 Scanner dis=new Scanner(System.in);
dis.useDelimiter("\D");
int a,b,c;
a=dis.nextInt();
b=dis.nextInt();
c=dis.nextInt();
System.out.println(a   " "   b   " "   c);
dis.close();
 

Входные данные (либо или)

  • 1,2,3
  • 1 2 3

Вывод

 1 2 3
 

Примечание

  • Не забудьте close свой Scanner !
  • Смотрите API для Pattern s для дополнительного удовольствия, разделяющего ваш ввод.

Ответ №2:

вы можете использовать метод nextLine для чтения строки и использовать метод split для разделения запятой следующим образом:

 public static void main(String args[])
    {
        Scanner dis=new Scanner(System.in);
        int a,b,c;
        String line;
        String[] lineVector;

        line = dis.nextLine(); //read 1,2,3

        //separate all values by comma
        lineVector = line.split(",");

        //parsing the values to Integer
        a=Integer.parseInt(lineVector[0]);
        b=Integer.parseInt(lineVector[1]);
        c=Integer.parseInt(lineVector[2]);

        System.out.println("a=" a);
        System.out.println("b=" b);
        System.out.println("c=" c);
    }
 

Этот метод будет работать только с 3 значениями, разделенными запятой.

Если вам нужно изменить количество значений, вы можете использовать цикл для получения значений из вектора.