Есть ли способ считать целочисленные элементы в текстовом файле? - PullRequest
0 голосов
/ 03 января 2019

Итак, у меня есть текстовый файл:

enter image description here

, и я хочу посчитать количество целых чисел в первой строке.

// e.g. The first row : 3 12 1 8 5 8 1 2 1 4 --> 10

Могу ли я сделать это с помощью оператора stream или for или другим способом?Я попытался с for, и это не сработало для меня, и я не мог найти никакого полезного решения.Пожалуйста, помогите мне.

public class Egyszamjatek {

    public static void main(String[] args) throws IOException {
        List<String> game = Files.readAllLines(Paths.get("egyszamjatek.txt"));
        ArrayList<OneGame> games = new ArrayList<>();

        for (String game1 : game) {
            String[] split = game1.split(" ");
            int rounds = Integer.parseInt(split[0]) + Integer.parseInt(split[1]) + Integer.parseInt(split[2])
                    + Integer.parseInt(split[3]) + Integer.parseInt(split[4]) + Integer.parseInt(split[5])
                    + Integer.parseInt(split[6]) + Integer.parseInt(split[7]) + Integer.parseInt(split[8])
                    + Integer.parseInt(split[9]);
            String names = split[10]; 

            games.add(new OneGame(rounds, names));
        }

        System.out.println("3.feladat: number of players : " + game.stream().count());
        System.out.println("4. feladat: number of rounds: "  );

    }

    static class OneGame {
        int rounds;
        String names;

        public OneGame(int rounds, String names) {
            this.rounds = rounds;
            this.names = names;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 03 января 2019

решение с для цикла

    String firstLine = "3 12 1 8 5 8 1 2 1 4";

    String[] splits = firstLine.split(" ");

    int count = 0 ;
    for(String intStr:splits){
        try {
            int i = Integer.parseInt(intStr);
            count++;
        }catch (NumberFormatException e){
            e.printStackTrace();
        }

    }
    System.out.println(count);
0 голосов
/ 03 января 2019

Вы можете сделать что-то вроде:

List<OneGame> games = Files.lines(Paths.get("egyszamjatek.txt")) // Stream<String> each line as a single String
        .map(g -> {
            String[] split = g.split(" ");
            int rounds = (int) Arrays.stream(split)
                    .filter(a -> isInteger(a)) // filter only integers
                    .count(); // count how many integers e.g. 10 in your first line
            return new OneGame(rounds, split[rounds]); // create an instance with count and name
        }).collect(Collectors.toList()); // collect to list

, где isInteger(a) - утилита, которую вы можете использовать из этого ответа .Его реализация будет выглядеть следующим образом:

public static boolean isInteger(String str) {
    if (str == null) {
        return false;
    }
    if (str.isEmpty()) {
        return false;
    }
    int i = 0;
    if (str.charAt(0) == '-') {
        if (str.length() == 1) {
            return false;
        }
        i = 1;
    }
    for (; i < str.length(); i++) {
        char c = str.charAt(i);
        if (c < '0' || c > '9') {
            return false;
        }
    }
    return true;
}

Примечание : код основывается на определенных предположениях, например, целочисленные значения для числа раундов заменят имяигра и, следовательно, использует split[rounds] для доступа к имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...