【问题标题】:Token and line processing Java令牌和线路处理 Java
【发布时间】:2016-01-23 08:07:37
【问题描述】:

我正在编写一个程序,它从包含各种篮球运动统计数据的文本文件中读取数据。每行(在两个标题行之后)对应于一场特定的比赛和每支球队的得分,其中还有一些其他字符串。我正在尝试使用扫描仪读取每场比赛的 int 分数,将它们存储在变量中,然后比较它们以确定哪支球队赢得了那场比赛,这样我就可以在程序的后面增加胜利。我想出了如何按顺序读取所有整数,但我不知道如何读取一行中的两个整数,将它们存储为变量,比较它们,然后继续下一行/游戏。

下面是相关方法:

public static void numGamesHTWon(String fileName)throws FileNotFoundException{
    System.out.print("Number of games the home team won: ");
    File statsFile = new File(fileName);
    Scanner input1 = new Scanner(statsFile);
    String line = input1.nextLine();
    Scanner lineScan = new Scanner(line);
    input1.nextLine();
    input1.nextLine();

    while (input1.hasNext()) {
        if (input1.hasNextInt()) {
            int x = input1.nextInt();
            System.out.print(x);   
            input1.next();
        } else {
            input1.next();
        }
    }

文本文件中的几行:

NCAA 女篮

2011 - 2012

2007-11-11 赖斯 63 @Winthrop 54 O1
2007-11-11 @S Dakota St 93 UC Riverside 90 O2
2007-11-11 @Texas 92 Missouri St 55
2007-11-11 田纳西州 76 查塔努加 56
2007-11-11 密西西比街 76 世纪 57
2007-11-11 ETSU 75 Delaware St 72 O1 季前赛 NIT

【问题讨论】:

    标签: java string java.util.scanner token line-processing


    【解决方案1】:

    逐行读取文件。然后将该行拆分为 String[]。因为您知道分数在每行上的位置,所以您可以轻松地从数组中解析这些值并进行比较。你能分享几行你的输入吗?然后我可以告诉你确切的代码

    你可以试试

    String[] parts = str.split("\\D+");
    

    其中 str 是您刚刚阅读的行。现在,parts 数组将包含字符串中的所有数字。只需通读数组,解析为 int 并进行比较。请注意,此数组中的前三个条目将对应于日期,因此请忽略它们。

    例如

    String[] parts = "2007-11-11 Mississippi St 76 Centenary 57".split("\\D+");
    
    for (String g: parts)
    
            System.out.println(g);
    

    打印出来

    2007
    11
    11
    76
    57
    

    所以现在你可以只取最后两个值并比较

     while (input1.hasNextLine()) {
                String line = input1.nextLine();
    
                 String[] parts = line .split("\\D+");
    
                 int score1 = Integer.parseInt(parts[parts.length-2]);
    
                 int score2 = Integer.parseInt(parts[parts.length-1]);
    
                 /*now compare score1 and score2 and do whatever...*/
            }
    

    【讨论】:

    • 我不应该使用数组或解析,只是使用扫描仪来读取文件、行和令牌。
    • 除了日期,你确定一行只能得到两个int?
    • 日期不计为整数,两个分数是整数,出现的 O2 和 O1 不被读为整数,因为它们以“O”开头,所以我的方式它,它只是按顺序打印出所有分数。每行应该只有两个分数。
    • 请查看最新编辑。尝试运行代码,看看是否可行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2017-07-18
    • 2021-02-19
    • 2021-10-06
    • 2014-08-01
    • 2017-04-30
    • 2013-01-06
    相关资源
    最近更新 更多