string.split(\\ s +)无法处理前导空格

时间:2018-09-19 04:21:49

标签: java string bufferedreader

我正在尝试解析此文件以使每行包含两个组件:

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

3 个答案:

答案 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));
}