我正在尝试解析此文件以使每行包含两个组件:
10000 0
0 10000
3000 7000
7000 3000
20000 21000
3000 4000
14000 15000
6000 7000
我用来扫描和拆分内容的代码是:
BufferedReader br = new BufferedReader(new FileReader(file));
while ((st = br.readLine()) != null){
String[] coordinates = st.split("\\s+");
System.out.println("coordinate[0]= " + coordinates[0] + "coordinate[1]= "+ coordinates[1]);
}
我没有得到第二行“ 0 10000”的预期结果,我得到了:
coordinate[0]= coordinate[1]= 0
有人可以帮我解决这个问题,所以我得到坐标[0] = 0,坐标[1] =10000。Internet上的所有结果仅涉及split(\ s +)函数,但是我找不到任何东西解决了我面临的问题。
即使第三行得到的结果也不正确(开头也有一个空格)。
coordinate[0]= coordinate[1]= 3000
答案 0 :(得分:3)
查看您的输入
您的第一行工作正常,因为在行的开头没有空格。
但是在第二行或第三行的情况下,存在空白。
因此,当您致电
st.split("\\s+");
索引0将具有空格,索引1将具有值,即第二行中的0
要解决此问题,您可以在拆分此类内容之前先修剪空白处
String[] coordinates = st.trim().split("\\s+");
答案 1 :(得分:1)
一种选择是在分割整个字符串之前对其进行修剪。
String[] coordinates = st.trim().split("\\s+");
答案 2 :(得分:0)
您也可以使用regex来解决此问题
(\d+)\s+(\d+)
代码如下:
//read file into a string
String content = new String(Files.readAllBytes(Paths.get(file)), "UTF-8");
//create regex and pattern
Pattern pattern = Pattern.compile("(\\d+)\\s+(\\d+)");
Matcher matcher = pattern.matcher(str);
//output results
while (matcher.find()) {
System.out.print("coordinate[0]= " + matcher.group(1));
System.out.println("coordinate[1]= " + matcher.group(2));
}