gpt4 book ai didi

Java:如何从文本文件中仅读取int数据来执行计算?

转载 作者:行者123 更新时间:2023-11-30 07:02:19 25 4
gpt4 key购买 nike

我使用按钮将用户输入保存到文本文件中,现在我想检索它来进行计算。文本文件已更新并添加了新值。以下是文本文件的外观示例:

  1. 周一:1 周二:2 周三:3

...等等

当有新的输入时,它会被添加,所以更新后的文本文件如下所示:

  1. 周一:1 周二:2 周三:3
  2. 周一:4 周二:1 周三:3
  3. 周一:6 周二:5 周三:6
  4. 周一:7 周二:6 周三:5

基本上我想将新输入与之前的输入进行比较。如何仅检索最新和最后输入的所有整数?

或者我应该使用Excel?

这是我的代码:

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)
}
}

最佳答案

简单地说:

  1. 仅保留最后 2 行来读取文件,
  2. 然后使用正则表达式提取整数。

对应代码:

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
}
}

注意:这假设我们在两行中具有完全相同数量的整数,否则您可以比较不相关的值。

<小时/>

另一种方法,如果您使用Java 8,您可以使用非整数作为分隔符,然后依赖 splitAsStream(CharSequence input)将所有整数提取为 List:

...
// 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

关于Java:如何从文本文件中仅读取int数据来执行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com