我有一个包含以下数据的文本文件:
20;
1: 39, 63;
2: 33, 7;
16: 33, 7;
3: 45, 27;
4: 8, 67;
5: 19, 47;
6: 15, 40;
...
20: 65, 54;
第一个整数是列表中的条目数量。
每一行都是一个条目。因此,条目1分别具有x y坐标39和63。
我知道我可以使用不同的分隔符来读取数据,但我不太清楚如何实现这一点。目前我正在使用split()
。
以下代码读取每一行,但这显然不起作用,因为分隔符未正确设置。是否有一种很好的方法可以让它发挥作用?
String[] temp = sc.next().split(";");
int productAmount = Integer.parseInt(temp[0]);
sc.nextLine();
for (int i = 0; i < productAmount; i++) {
int productID = sc.nextInt();
int x = sc.nextInt();
int y = sc.nextInt();
Product product = new Product(x, y, productID);
productList.add(product);
}
答案 0 :(得分:1)
从中移除最后一个字符后,可以将所有标记转换为整数。您可以使用给定数据的此属性。定义这样的方法:
int integerFromToken(String str) {
return Integer.valueOf(str.substring(0, str.length() - 1));
}
返回令牌的整数部分(39,
返回39
,63;
返回63
等。现在使用该方法从标记获取整数值(使用sc.next()
获得):
int productID = integerFromToken(sc.next());
int x = integerFromToken(sc.next());
int y = integerFromToken(sc.next());
答案 1 :(得分:1)
如果您使用
String[] temp = sc.next().split("[ ,:;]");
然后您的temp
变量将只保留数字。字符串"[ ,:;]"
是regular expression,这意味着方括号中的任何字符都是分隔符。
答案 2 :(得分:0)
非常类似 Croo 所说的,但是当我使用他的方法时出现编译错误。
为了避免通过将空格作为分隔符来匹配空字符串,我允许它们并使用对trim
的调用来摆脱它们更有意义。
同样有用的是知道Scanner
可以被赋予regex
表达式作为分隔符,然后调用next
可以用来导航输入。
sc.useDelimiter("[,:;]");
int productAmount = Integer.parseInt(sc.next());
int x, y, productID, i;
for (i = 0; i < productAmount; i++) {
productID = Integer.parseInt(sc.next().trim());
x = Integer.parseInt(sc.next().trim());
y = Integer.parseInt(sc.next().trim());
productList.add(new Product(x,y,productID));
}