【问题标题】:Split comma separated values in java, int and String在java,int和String中拆分逗号分隔值
【发布时间】:2018-05-05 04:32:49
【问题描述】:

我在一个文本文件中有以下内容要导入到 ArrayList 中:

澳大利亚,2

加纳,4

中国,3

西班牙,1

我的 ArrayList 由另一个类的对象组成,Team 具有字段 TeamName 和排名。我可以得到以下将 String 和 int 导入团队名称,但我无法将应该是团队排名的数字分开:

  public void fileReader()
  {
    try
    {
        String filename = "teams.txt";
        FileReader inputFile = new FileReader(filename);
        Scanner parser = new Scanner(inputFile);

        for (Team teams : teams)
        {                 
            teams.setTeamName(parser.next());
            teams.setRanking(parser.next()); //this doesn't work
        }
    }

    catch (IOException e)
    {
        System.out.println("Cannot find file");
    }

}

我猜我必须在某处使用拆分,或者将字符串转换为整数??

【问题讨论】:

    标签: java arraylist split


    【解决方案1】:

    查看 opencsv。现在是 2018 年,您不必自己解析文本文件 :)。

    【讨论】:

      【解决方案2】:

      默认情况下,扫描仪将使用空格作为分隔符

      在您的案例中调用 useDelimiter 方法来覆盖它 parser.useDelimiter(',');

      然后将排名字符串转换为 int 你 parser.nextInt()

      【讨论】:

        【解决方案3】:

        您可以编写如下代码来满足您的目的。 您的用例中有两个标记,即逗号 (,) 和换行符 (\n)。因此,next() 不能直接使用。

        我将遍历每一行,然后用逗号对每一行进行标记,最后得到后续标记。

        try
            {
                String filename = "teams.txt";
                FileReader inputFile = new FileReader(filename);
                Scanner parser = new Scanner(inputFile);
        
                for (Team teams : teams)
                {   
                    String[] splitLine = sc.nextLine().split(","); // comma delimited array
        
                    teams.setTeamName(splitLine[0]);
                    teams.setRanking(splitLine[1]); 
                }
            }
        

        【讨论】:

          【解决方案4】:

          Scanner.next()从输入流中读取下一个token,并给出String

          如果你想读取下一个整数,你应该改用nextInt()

          teams.setRanking(parser.nextInt());
          

          编辑

          您得到了InputMismatchException,因为默认情况下,Scanner 使用 java 空白作为分隔符。

          WHITESPACE_PATTERN = Pattern.compile("\\p{javaWhitespace}+")

          在您的情况下,分隔符是逗号, 和新行\n,因此您应该为您的扫描仪配置分隔符:

          Scanner parser = new Scanner(inputFile);
          s.useDelimiter(",|\\n")
          

          另一种解决方法是读取整行并解析您的行:

          String line = parse.nextLine();
          String[] parts = line.split(",");
          team.setTeamName(parts[0]);
          team.setRanking(Integer.parse(parts[1]));
          

          您可以选择上述两种解决方案之一

          【讨论】:

          • 感谢您的回答。这可以编译,但我在运行时收到 InputMismatchException。
          • 谢谢您,很抱歉没有尽快回复您。这很有效,我非常感谢。
          • 虽然这可行,但我不确定我对它的理解是否很好。行 String[] 部分...是创建一个数组然后我将值分配给我的数组列表?
          • String[] parts = line.split(","); 将根据, 分隔符拆分您的字符串。如果您的行是“Ghana,4”,那么它会为您提供包含两个元素 [“Ghana”、“4”] 的字符串数组。现在清除吗?
          • 但我建议您使用第一种方法。这更容易:)
          猜你喜欢
          • 1970-01-01
          • 2018-12-25
          • 2015-04-01
          • 2010-11-06
          • 1970-01-01
          • 2017-02-22
          • 1970-01-01
          相关资源
          最近更新 更多