我想逐行读取文件并解析它。
我的目标是找到像这样的行:
V X=51:52.77 北 001:13.33 西
数字可能不同
这是我现在的代码:
package kml_gen;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Kml_gen {
private final Path fFilePath;
public static void main(String... aArgs) throws IOException {
Kml_gen parser = new Kml_gen("C:\\Users\\DSR\\Documents\\master\\kml_gen\\uk_air_2002.txt");
parser.processLineByLine();
log("Done.");
}
/**
* Constructor.
*
* @param aFileName full name of an existing, readable file.
*/
public Kml_gen(String aFileName) {
fFilePath = Paths.get(aFileName);
}
/**
* Template method that calls {@link #processLine(String)}.
*
* @throws java.io.IOException
*/
public final void processLineByLine() throws IOException {
try (Scanner scanner = new Scanner(fFilePath)) {
while (scanner.hasNextLine()) {
processLine(scanner.nextLine());
}
}
}
/*
* @param aLine
*/
protected void processLine(String aLine) {
//use a second Scanner to parse the content of each line
//regex [V]\\s*[X][=]\\d+\\:\\d+\\.\\d+\\s*[N]\\s*\\d+\\:\\d+\\.\\d+\\s*[W]
String patternstr = "[V]\\s[X][=]\\d*\\:\\d*\\.\\d*\\s[N]\\s\\d*\\:\\d*\\.\\d*\\s[W]";
Pattern pattern = Pattern.compile(patternstr);
Matcher matcher = pattern.matcher(aLine);
boolean matches = matcher.matches();
if (matcher.find()) {
/* example of text to be parsed:
V X=51:52.77 N 001:13.33 W */
if (matches) {
System.out.println("V X=" + matcher.group() + ":" + matcher.group() + "." + matcher.group() + " N "
+ matcher.group() + ":" + matcher.group() + "." + matcher.group() + " W");
}
} else {
log("Empty or invalid line. Unable to process.");
}
}
private static void log(Object aObject) {
System.out.println(String.valueOf(aObject));
}
因为我的输出始终是“空行或无效行。无法处理。”。我真的很感谢任何帮助,谢谢。
编辑:这是一些要处理的文本,我只考虑以“V X=...”开头的行。
交流问
安帕拉韦斯顿
AL证监会
AH FL120
V X=51:52.77 N 001:13.33 W
直流1.5
最佳答案
//.matches() and .find() can't be used twice,should remove .matches()
String patternstr = "V\\sX=(\\d+):(\\d+)\\.(\\d+)\\sN\\s(\\d+):(\\d+)\\.(\\d+)\\sW";
//matcher.group(); match all the line
System.out.println("V X=" + matcher.group(1) + ":" + matcher.group(2)
+ "." + matcher.group(3) + " N " + matcher.group(4) + ":"
+ matcher.group(5) + "." + matcher.group(6) + " W");
关于java - 将文本文件解析为数字输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357863/