Java:如何从文本文件中只读取int数据来执行计算?
我使用一个按钮将用户输入保存到一个文本文件中,现在我想检索它来进行计算。 将更新文本文件并添加新值。 以下是文本文件外观的示例:Java:如何从文本文件中只读取int数据来执行计算?,java,file,text,bufferedreader,stringreader,Java,File,Text,Bufferedreader,Stringreader,我使用一个按钮将用户输入保存到一个文本文件中,现在我想检索它来进行计算。 将更新文本文件并添加新值。 以下是文本文件外观的示例: 星期一:1星期二:2星期三:3 …等等 当有新的输入时,它将被添加,所以 更新后的文本文件如下所示: 星期一:1星期二:2星期三:3 星期一:4星期二:1星期三:3 星期一:6星期二:5星期三:6 星期一:7星期二:6星期三:5 基本上我想比较新的输入和以前的输入。 如何仅从最新和最后一次输入中检索所有整数 还是我应该使用excel 这是我的密码: try (
try (
InputStream fs = new FileInputStream("data.txt");
// not sure how to use the Charset.forname
InputStreamReader isr = new InputStreamReader(fs, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr)) {
for (String line1 = br.readLine(); line1 != null; line = br.readLine()) {
comp = line1 - line2; //line1 being current line(4) and line2 being the previous(3)
}
}
简单地说:
try (
InputStream fs = new FileInputStream("data.txt");
InputStreamReader isr = new InputStreamReader(fs, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr)) {
// Previous line
String prev = null;
// Last line
String last = null;
String line;
while ((line = br.readLine()) != null) {
prev = last;
last = line;
}
// Pattern used to extract the integers
Pattern pattern = Pattern.compile("\\d+");
// Matcher for the previous line
Matcher matcher1 = pattern.matcher(prev);
// Matcher for the last line
Matcher matcher2 = pattern.matcher(last);
// Iterate as long as we have a match in both lines
while (matcher1.find() && matcher2.find()) {
// Value of previous line
int val1 = Integer.valueOf(matcher1.group());
// Value of last line
int val2 = Integer.valueOf(matcher2.group());
// Do something here
}
}
NB:假设两行中的整数数完全相同,否则可以比较不相关的值
另一种方法是,如果使用Java8,则可以使用非整数作为分隔符,然后依靠将所有整数提取为
列表
:
...
// Non integers as a separators
Pattern pattern = Pattern.compile("\\D+");
// List of extracted integers in previous line
List<Integer> previous = pattern.splitAsStream(prev)
.filter(s -> !s.isEmpty())
.map(Integer::valueOf)
.collect(Collectors.toList());
// List of extracted integers in last line
List<Integer> current = pattern.splitAsStream(last)
.filter(s -> !s.isEmpty())
.map(Integer::valueOf)
.collect(Collectors.toList());
// Do something here
。。。
//作为分隔符的非整数
Pattern=Pattern.compile(\\D+);
//前一行中提取的整数列表
List previous=模式.分割流(prev)
.filter(s->!s.isEmpty())
.map(整数::valueOf)
.collect(Collectors.toList());
//最后一行中提取的整数列表
List current=pattern.splitAsStream(最后一个)
.filter(s->!s.isEmpty())
.map(整数::valueOf)
.collect(Collectors.toList());
//在这里做点什么
你确定你粘贴的代码是正确的吗?最新的标准是什么?@TimothyTruckle最新的是第4行,最后一行是第3行,但是任何程序在读取文件时怎么知道这一点?