Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中从txt文件中读取冒号分隔值_Java_String - Fatal编程技术网

如何在java中从txt文件中读取冒号分隔值

如何在java中从txt文件中读取冒号分隔值,java,string,Java,String,我试图从如下格式的文本文件中读取数据: Operation: ADDITION Attempts: 3 我试图读入的数据是操作和每行的尝试次数,例如加法和数字3 这是我所能做到的,我仍然不确定 File inputFile = new File("mathFile.txt"); Scanner input = new Scanner(inputFile); while(input.hasNext()) { String token = input.nextLine

我试图从如下格式的文本文件中读取数据:

Operation: ADDITION Attempts: 3
我试图读入的数据是操作和每行的尝试次数,例如加法和数字3

这是我所能做到的,我仍然不确定

File inputFile = new File("mathFile.txt");
 Scanner input = new Scanner(inputFile);

 while(input.hasNext())
    {
        String token = input.nextLine();
        String[] details = token.split("Operation:");
        String operation = details[0];
}
//模型:线表示法
公共最终类MathFileLine{
私有最终字符串操作;
私人最终尝试;
公共MathFileLine(字符串操作,整数尝试){
这个操作=操作;
这个。尝试=尝试;
}
}
//客户端代码
公共静态void main(字符串…参数)引发IOException{
列表行=readMathFile(path.get(“mathFile.txt”);
}
#1:使用Stream读取带有正则表达式的行
公共静态列表readMathFile(路径路径)引发IOException{
最终模式=模式。编译(“^Operation:\\s+(?\\w+)\\s+尝试:\\s+(?\\d+)”;
返回文件。行(路径)
.map(模式::匹配器)
.filter(Matcher::matches)
.map(matcher->newmathfileline(matcher.group(“操作”)、Integer.parseInt(matcher.group(“尝试”))
.collect(Collectors.toList());
}
#2:使用带有自定义分隔符的扫描仪读取对
公共静态列表readMathFile(路径路径)引发IOException{
尝试(扫描仪扫描=新扫描仪(path.toFile()){
scan.useDelimiter(“\\s*(?:操作:|尝试:)?\\s+”;
列表行=新建LinkedList();
while(scan.hasNext()){
添加(新的MathFileLine(scan.next(),scan.nextInt());
}
回流线;
}
}

最简单的选择是在空格上拆分:

String[] parts = token.split(" ");
String operation = parts[1];
String attempts = parts[3];
如果您想变得更时尚,可以使用正则表达式:

String token = "Operation: ADDITION Attempts: 3";
Matcher matcher = Pattern.compile("^Operation: (\\w+) Attempts: (\\d+)$").matcher(token);
if (matcher.find()) {
    String operation = matcher.group(1);
    String attempts = matcher.group(2);
}

有许多方法可以读取文本文件并基于某个分隔符拆分行。除了这里的所有其他答案之外,下面是另一个简洁明了的答案

(1) 读取文件的行

List<String> lines = Files.lines(Paths.get("mathFile.txt")).collect(Collectors.toList());
List<String> operations = lines.stream().map(line -> line.split("Operation:")[0]).collect(Collectors.toList());
List line=Files.line(path.get(“mathFile.txt”).collect(Collectors.toList());
(2) 从每行中解析您想要的内容

List<String> lines = Files.lines(Paths.get("mathFile.txt")).collect(Collectors.toList());
List<String> operations = lines.stream().map(line -> line.split("Operation:")[0]).collect(Collectors.toList());
List operations=lines.stream().map(line->line.split(“操作:)[0]).collect(Collectors.toList());

您的思路是正确的,但在发布之前,请花点时间做一些事情。如果你发现的东西对你没有帮助,就把你发现的东西和没有帮助的原因贴出来。
List<String> operations = lines.stream().map(line -> line.split("Operation:")[0]).collect(Collectors.toList());