我有一个文本文件,其中包含字符串后跟两个数字,用冒号分隔。例如:
...................
words 1:1
morewords 2:1
something 3:1
else 4:2
elsewhere 5:2
....................
middleItem 313 : 60
middleOther 314 : 60
......................
secondToLast 138714 : 29698
last 138715 : 29698
.......................
我希望能够提取冒号左侧和右侧的数字,并能够将它们作为整数读取。我需要能够使用这些int数字稍后执行计算,因此将它们作为String读取将无济于事。
我尝试过使用子字符串和正则表达式,但我无法弄清楚这样做的正确方法。任何提示都会有所帮助!
答案 0 :(得分:1)
Scanner sc = new Scanner(<OUR_FILE>)
sc.nextInt()
答案 1 :(得分:1)
Scanner s = new Scanner("file"); // A delimiter can also be used to separate lines
while (s.hasNext()) {
if (s.hasNextInt()) {
int a = (s.nextInt()); // found integer
} else {
s.next(); // read the next token
}
}
答案 2 :(得分:1)
您可以使用流来创建地图,将每个单词映射到Pair<Integer, Integer>
:
Pattern p = Pattern.compile("^(\\w+)\\s+(\\d+)\\s*:\\s*(\\d+)$");
Path input = Paths.get("input.txt");
try(BufferedReader br = Files.newBufferedReader(input)) {
Map<String, Pair<Integer, Integer>> map
= br.lines() // Get Stream of lines
.map(String::trim) // Safety trim
.map(p::matcher) // Get mathcer for each line
.filter(Matcher::find) // Filter on lines that match
.collect( // Collect into map
Collectors.toMap(
m -> m.group(1), // The word is the key
// Maps to a Pair of the 2 integers
m -> new Pair<>(Integer.valueOf(m.group(2)), Integer.valueOf(m.group(3)))
)
);
/* Usage */
Pair<Integer, Integer> pair = map.get("middleItem");
System.out.println(pair.getKey()); // 313
System.out.println(pair.getValue()); // 60
} catch(IOException e) {
e.printStackTrace();
}
作为一个注释:正则表达式不是我的专长,所以可能有更好的模式。
答案 3 :(得分:0)
我确定有更好的方法,但我首先想到的是使用
scanner.nextInt() = variable1,
scanner.nextInt() = variable2
等等。然后,使用您指定的变量写出所有逻辑和计算。
这样做(与poorvankBhatia的答案相结合)可以让你使用整个文件。