从文件中读取java中包含逗号和空格的行

时间:2016-12-07 21:43:50

标签: java arrays string file parsing

我正在读取一个文件,该文件的行中有一对用逗号分隔的数字:

1 2, 2 3, 3 1, 4 1, 2 4, S

结果是:

ValueOne - 1 -- ValueTwo - 2 
ValueOne - 2 -- ValueTwo - 3 
ValueOne - 3 -- ValueTwo - 1 
ValueOne - 4 -- ValueTwo - 1
ValueOne - 2 -- ValueTwo - 4
Break

这是我目前的代码:

try{
        Scanner scanner = new Scanner(new File("graph.txt"));
        while(scanner.hasNextLine()){
            String value = scanner.next();
            String[] values = value.split(" |,");
            if(value.equals("S")){
                System.out.println("Break");
                break;
            }
            int v1 = Integer.parseInt(values[0]);
            int v2 = Integer.parseInt(values[1]);
            System.out.println("ValueOne - " + v1 + " -- " + "ValueTwo - "+ v2);
        }
        scanner.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

我在“int v2 = Integer.parseInt(values [1]);”

获得 ArrayIndexOutOFBoundsException

我确定我错过了一些愚蠢的东西,但我只需要一些新鲜的眼睛来看看它。感谢。

3 个答案:

答案 0 :(得分:0)

您没有正确拆分字符串。你需要这样做:

 String[] values = value.split(",");

但即使这样,你也无法获得预期的输出。这会将值分成对。你将不得不再这样吐:

for(String value : values){
   String[] pairs = value.split(" "); 
    int v1 = Integer.parseInt(pairs[0]);
    int v2 = Integer.parseInt(pairs[1]);
    System.out.println("ValueOne - " + v1 + " -- " + "ValueTwo - "+ v2);
}

答案 1 :(得分:0)

String value = scanner.next();

这只是从您的文件中获取第一个令牌。您需要将其替换为以下内容,以便您可以阅读整行:

String value = scanner.nextLine();

此外,您需要进行2次单独的拆分。一个逗号分隔,这样您就可以在空格中使用[1 2],[2 3]等元素和另一个分割,这样您就可以专门引用每个值并根据需要打印出来。

答案 2 :(得分:0)

您的scanner.next()一次只读取一个令牌(直到空格),因此您无法直接使用split(","),而是需要编写逻辑,如下面的代码所示: / p>

String v1 = null;
String v2 = null;
Scanner scanner = new Scanner(new File("graph.txt"));
while(scanner.hasNextLine()){
       String value = scanner.next();
       if(value.equals("S")){
            System.out.println("Break");
             break;
      }

     //Check if token ends with ','
     if(value.endsWith(",")) {
            v1 = v2;//swap v1 and v2
            v2 = value.substring(0, value.length());//substring till ','

            //Since ',' one pair consumed, so print the values
            System.out.println("ValueOne - " + v1 + " -- " + "ValueTwo - "+ v2);
      } else {

          //If token does not end with ',' just consume value, don't print
          v2 = value;
      }
}