我将如何使用整数分隔符? (JAVA)

时间:2018-03-21 23:11:47

标签: java java.util.scanner delimiter

所以我试图用扫描仪读取文件。此文件包含有两个城镇的数据,它们之间的距离在每一行上跟随它们。像这样:

Ebor,盖勒(Guyra)90

我试图让每个城镇都成为个体,允许重复。这就是我到目前为止所做的:

   // Create scanner for file for data
   Scanner scanner = new Scanner(new File(file)).useDelimiter("(\\p{javaWhitespace}|\\.|,)+");

   // First, count total number of elements in data set
   int dataCount = 0;

   while(scanner.hasNext())
   {
      System.out.print(scanner.next());
      System.out.println();
      dataCount++;
   }

现在,该程序打印出每条信息,无论是城镇名称还是整数值。像这样:

Ebor

Guyra

90

我怎样才能做到这一点,每行都有这样的输出:

Ebor

Guyra

谢谢!

3 个答案:

答案 0 :(得分:3)

假设格式良好的输入,只需将循环修改为:

while(scanner.hasNext())
{
    System.out.print(scanner.next());
    System.out.print(scanner.next());
    System.out.println();
    scanner.next();
    dataCount += 3;
}

否则,如果输入格式不正确,请在每次hasNext()通话前检查next()是否需要在那里打破循环。

答案 1 :(得分:1)

以这种方式尝试:

    Scanner scanner = new Scanner(new File(file));
    int dataCount = 0;

    while(scanner.hasNext())
    {
        String[] line = scanner.nextLine().split(",");
        for(String e : line) {
            if (!e.matches("-?\\d+")) System.out.println(e);;
        }
        System.out.println();
        dataCount++;
    }
}

我们将逐行进行,将其拆分为数组,并使用正则表达式检查它是否为整数。

-? stays for negative sign, could have none or one
\\d+ stays for one or more digits

示例输入:

Ebor,Guyra,90
Warsaw,Paris,1000

输出:

Ebor
Guyra

Warsaw
Paris

答案 2 :(得分:1)

我写了一个名为intParsable的方法:

public static boolean intParsable(String str)
{
    int n = -1;
    try
    {
        n = Integer.parseInt(str);
    }
    catch(Exception e) {}
    return n != -1;
}

然后在你的while循环中我会:

String input = scanner.next();
if(!intParsable(input))
{
    System.out.print(input);
    System.out.println();
    dataCount++;
}