чтение одной строки, разделенной запятыми и пробелом-java


Я готов прочитать ряд чисел из одной строки, как показано ниже в Java:

1   80,982  163,8164                    170,2620    

Поэтому в конечном итоге я хочу получить результирующий массив [1, 80, 982, 163, 8164, 170, 2620]

Я думаю об использовании сканера, но не ясно, как реализовать его аккуратным способом, могу я попросить несколько советов, пожалуйста?

Спасибо за чтение!

8 4

8 ответов:

Да класс сканера хорошо работает с этим.

public static void main(String[] args) throws Exception {
    Scanner s = new Scanner(strOrFile).useDelimiter(",| ");
    List<Integer> myList = new ArrayList<Integer>();
    while (s.hasNext()) {
       myList.add(s.nextInt());
    }
}

Это особенно хорошо работает, если Вы читаете из файла. (Сокращает работу для вас.)

Если бы это был я, я бы прочитал одну строку с помощью BufferedReader, а затем просто использовал

String[] values = line.split("[, ]");

Я обычно нахожу Scanner неопрятным и излишним.

Сканер в порядке, просто установите нужный шаблон разделителя, смотрите это .

Попробуйте это:

public static void main(String[] args) {
    String str = "1 80,982 163,8164 170,2620";
    String[] s = str.split(" |,");
    for(String ss:s)
        System.out.println(ss);
}

Поскольку вам нужна строка [], лучшим решением будет строка.сплит

String[] s = str.split("[ ,]+");

Разделите строку с помощью приведенного ниже регулярного выражения.

 String input = "1   80,982  163,8164                    170,2620 "; 
        String[] values = input.split("\\s*(,|\\s)\\s*");
        for(String val: values)
        {
            System.out.println(val);

        }

I соответствует следующим критериям.

  1. ноль или больше пробелов (,|\\s). Если у вас есть более одного разделителя, вы можете включить его в скобку, например (&|,|@|\\s).
  2. запятая и Пробел.

Проверьте скрипку здесь.

Java-программа

    String ss = "1 80,982 163,8164 170,2620";
    ss = ss.replaceAll(" ", ",");
    String arr[] = ss.split(",");
    for (int i=0;i<arr.length;i++) {
        System.out.println("line "+arr[i]);
    }

Для простого входного файла с некоторыми запятыми, пробелами и запятыми с пробелами, то регулярное выражение Rais и Евгения работали с split. В последнем случае знак + имеет решающее значение. Ни один из других вариантов не работал для этих данных: 1.0 2.0 3.0 4.0 5.0, 6.0 7.0 8.0 9.0 10.0, 11.0 12.0