具有混合类型输入的Java扫描程序类和主类

具有混合类型输入的Java扫描程序类和主类,java,java.util.scanner,Java,Java.util.scanner,嗨,我是一个Java初学者,一直在做作业。 我的问题是: 我正在创建一个scanner类和一个具有混合输入类型的main类。 代码是 import java.util.Scanner; import java.util.ArrayList; public class Games { private static Scanner input; public Games() { input = new Scanner(System.in); } public void text

嗨,我是一个Java初学者,一直在做作业。 我的问题是: 我正在创建一个scanner类和一个具有混合输入类型的main类。 代码是

import java.util.Scanner;
import java.util.ArrayList;

public class Games {

   private static Scanner input;

public Games() {
    input = new Scanner(System.in);
}

public void textParser() {

    ArrayList<String> word = new ArrayList<>();      
    while(input.hasNextLine()) {
        word.add(input.next());         
    }
     System.out.println("number of words " + word.size());
     System.out.println(word);


     ArrayList<Integer> num = new ArrayList<>();         
        while(input.hasNextInt()) {
            num.add(input.nextInt());           
        }
         System.out.println("number of numbers " +num.size());
         System.out.println(num);


    ArrayList<Double> number = new ArrayList<>();        
        while(input.hasNextDouble()) {
            number.add(input.nextDouble());         
        }
        System.out.println("number of doubles " +number.size());
        System.out.println(number);
}
}
如何得出如下要求的结果:

字数11

[杰克,开始,比赛,表格,下午,到下午,他,得到,得分]

数字2的数目

[9,11]

双打号码1

[73.2]


请尝试以下代码

class Games
{

    public static Scanner input;

    public Games()
    {
        // input = new Scanner(System.in);
    }

    public void textParser()
    {

        ArrayList<String> word = new ArrayList<>();
        while (input.hasNextLine())
        {
            word.add(input.next());
        }
        System.out.println("number of words " + word.size());
        System.out.println(word);

        // Scanner s = new Scanner("Jack started the game form 9 pm to 11 pm, he got score 73.2");

        input = new Scanner("Jack started the game form 9 pm to 11 pm, he got score 73.2");
        ArrayList<Integer> num = new ArrayList<>();
        while (input.hasNextLine())
        {
            input.next();
            while (input.hasNextInt())
            {
                num.add(input.nextInt());
            }

        }
        System.out.println("number of numbers " + num.size());
        System.out.println(num);
        // s.close();

        ArrayList<Double> number = new ArrayList<>();

        input = new Scanner("Jack started the game form 9 pm to 11 pm, he got score 73.2");
        while (input.hasNextLine())
        {
            input.next();
            while (input.hasNextDouble())
            {
                number.add(input.nextDouble());
            }

        }
        input.close();
        System.out.println("number of doubles " + number.size());
        System.out.println(number);
    }
}
您不需要Scanner类,因为您已经有了一个输入字符串。只需使用空格分隔符将其拆分为多个部分,然后进行检查

public class Driver {
    public static void main(String[] args){
        String str = "Jack started the game form 9 pm to 11 pm, he got score 73.2";
        new Games().textParser(str);
    }
}

public class Games {

    public /* static */ void textParser(String str) {
        String[] parts = str.split("\\s+");

        List<String> words = getWords(parts);
        System.out.println("number of words " + words.size());
        System.out.println(words);

        List<Integer> num = getIntegerNumbers(parts);
        System.out.println("number of numbers " + num.size());
        System.out.println(num);


        List<Double> number = getDoubleNumbers(parts);
        System.out.println("number of doubles " + number.size());
        System.out.println(number);
    }

    private static List<String> getWords(String... parts) {
        return Arrays.stream(parts)
                     .filter(str -> {
                         try {
                             Double.parseDouble(str);
                             return false;
                         } catch(Exception e) {
                             return true;
                         }
                     })
                     .collect(Collectors.toList());
    }

    private static List<Integer> getIntegerNumbers(String... parts) {
        return Arrays.stream(parts)
                     .map(str -> {
                         try {
                             return Integer.parseInt(str);
                         } catch(Exception e) {
                             return null;
                         }
                     })
                     .filter(Objects::nonNull)
                     .collect(Collectors.toList());
    }

    private static List<Double> getDoubleNumbers(String... parts) {
        return Arrays.stream(parts)
                     .map(str -> {
                         try {
                             return Double.parseDouble(str);
                         } catch(Exception e) {
                             return null;
                         }
                     })
                     .filter(Objects::nonNull)
                     .filter(val -> Double.compare(val, val.intValue()) != 0)
                     .collect(Collectors.toList());
    }
}

如何从scanner class->you not调用public void textParser方法。实际上,在main中调用类游戏的textParser方法的方法是:创建一个游戏实例Games=newgames;然后使用该实例调用该方法:game.textParser;。我试过你说的主课,但看不到答案result@oleg.cherednik我的不好,评论被删除。谢谢你的回复,但这会导致field Games.input不可见的错误。Games.input=句子;-这不是OOP,封装在哪里?问题中不需要封装。Dear@oleg.cherednik@oleg.cherednik根据问题,您应该使用Scanner class.Yes。你说得对,但我还没想好。
public class Driver 
{

    public static void main(String[] args)
    {
        String str = "Jack started the game form 9 pm to 11 pm, he got score 73.2";
        Scanner sentence = new Scanner(str);
        Games game = new Games();
        Games.input = sentence;
        game.textParser();
    }
}
public class Driver {
    public static void main(String[] args){
        String str = "Jack started the game form 9 pm to 11 pm, he got score 73.2";
        new Games().textParser(str);
    }
}

public class Games {

    public /* static */ void textParser(String str) {
        String[] parts = str.split("\\s+");

        List<String> words = getWords(parts);
        System.out.println("number of words " + words.size());
        System.out.println(words);

        List<Integer> num = getIntegerNumbers(parts);
        System.out.println("number of numbers " + num.size());
        System.out.println(num);


        List<Double> number = getDoubleNumbers(parts);
        System.out.println("number of doubles " + number.size());
        System.out.println(number);
    }

    private static List<String> getWords(String... parts) {
        return Arrays.stream(parts)
                     .filter(str -> {
                         try {
                             Double.parseDouble(str);
                             return false;
                         } catch(Exception e) {
                             return true;
                         }
                     })
                     .collect(Collectors.toList());
    }

    private static List<Integer> getIntegerNumbers(String... parts) {
        return Arrays.stream(parts)
                     .map(str -> {
                         try {
                             return Integer.parseInt(str);
                         } catch(Exception e) {
                             return null;
                         }
                     })
                     .filter(Objects::nonNull)
                     .collect(Collectors.toList());
    }

    private static List<Double> getDoubleNumbers(String... parts) {
        return Arrays.stream(parts)
                     .map(str -> {
                         try {
                             return Double.parseDouble(str);
                         } catch(Exception e) {
                             return null;
                         }
                     })
                     .filter(Objects::nonNull)
                     .filter(val -> Double.compare(val, val.intValue()) != 0)
                     .collect(Collectors.toList());
    }
}
number of words 11
[Jack, started, the, game, form, pm, to, pm,, he, got, score]
number of numbers 2
[9, 11]
number of doubles 1
[73.2]