我正在读取一个文件,该文件的行中有一对用逗号分隔的数字:
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我确定我错过了一些愚蠢的东西,但我只需要一些新鲜的眼睛来看看它。感谢。
答案 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;
}
}