我有以下文本文件
"Zanesville,OH" +39.93830 -82.00830 84ZC PMNQ
"Zaragoza,Spain" +41.66670 -1.05000 GWC7 PXB0
"Zurich,Switzerland" +47.36670 +8.53330 HP9Z QVT0
"Zwickau,Germany" +50.70000 +12.50000 J17H RFH0
现在我想要每行的值。值之间有很多空格。我知道正则表达式可用于获取值。但我无法制作一个。我用来读取文件的代码是这个
File file = new File("C:\\Users\\user\\Desktop\\files\\cities.txt");
if (file.exists()) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line = "";
while ((line = br.readLine())!= null) {
String token[] =line.split(" ");
}
}
有谁能告诉我怎样才能获得价值?
答案 0 :(得分:4)
根据以下正则表达式分割输入,
\\s+(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)
代码:
String s = "\"Zanesville,OH\" +39.93830 -82.00830 84ZC PMNQ\n" +
"\"Zaragoza,Spain\" +41.66670 -1.05000 GWC7 PXB0\n" +
"\"Zurich,Switzerland\" +47.36670 +8.53330 HP9Z QVT0\n" +
"\"Zwickau,Germany, United States\" +50.70000 +12.50000 J17H RFH0";
String[] tok = s.split("\\s+(?=(?:[^\"]*+\"[^\"]*+\")*+[^\"]*+$)");
System.out.println(Arrays.toString(tok));
输出:
["Zanesville,OH", +39.93830, -82.00830, 84ZC, PMNQ
"Zaragoza,Spain", +41.66670, -1.05000, GWC7, PXB0
"Zurich,Switzerland", +47.36670, +8.53330, HP9Z, QVT0
"Zwickau,Germany, United States", +50.70000, +12.50000, J17H, RFH0]
答案 1 :(得分:1)
您可以使用line.split("\\s+(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")
正则表达式模式来制作所需的输出。
答案 2 :(得分:1)
更通用的Excel解决方案,如CSV
这看起来原本是制表符分隔文字,标签被多个空格取代。双引号表示像Excel一样 CSV 。
由于双引号之间的文本可能包含换行符(多行文本),因此我从整个文本开始。
String encoding = "Windows-1252"; // English, best would be "UTF-8".
byte[] textAsBytes = Files.readAllBytes(file.toPath());
String text = new String(textAsBytes, encoding);
Excel用于(Windows)行结尾"\r\n"
。并以多行文字"\n"
。
String[] lines = text.split("\r\n");
在多个空格.split(" +")
上拆分可能会在引用字段内破坏。所以我使用了一种模式。
此模式使用引用的内容,其中任何内部引用作为两个引号自我转义。或者是一系列非空格。
Pattern pattern = Pattern.compile("\"^([^\"]|\"\")*\"|\\S+");
for (String line: lines) {
List<String> fields = new ArrayList<>();
Matcher m = pattern.matcher(line);
while (m.find()) {
String field = m.group();
if (fields.startsWith("\"") && field.endsWith("\"") && field.length() >= 2) {
field = field.substring(1, field.length() - 1); // Strip quotes.
field = field.replace("\"\"", "\""); // Unescape inner quotes.
}
fields.add(field));
}
...
}