读取空格分隔值

时间:2012-10-22 07:25:20

标签: java file-io io

我正在尝试从配置文件中读取空格分隔值。我正在阅读PostgreSQL配置文件pg_hba.conf文件,其中下面是该文件的数据:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# IPv4 local connections:

host    all         all         127.0.0.1/32          md5

我必须得到上面的值host,all,all,127.0.0.1 / 32,md5并修改并将修改后的值写回同一个文件。

以下是我用来读取文件的代码:

BufferedReader in = new BufferedReader(new FileReader("pg_hba.conf"));
String str;
str = in.readLine();
while ((str = in.readLine()) != null) {
    System.out.println(str);
}
in.close();

如何获取这些空格分隔值? 是否可以使用相同的格式再次写入,即将相同的空间量写回此文件?

我们可以使用Property类吗?

4 个答案:

答案 0 :(得分:3)

您可以使用标准Java类split中的方法String

str.split("\\s+");

另一种可能性是使用更像“{3}}的”高级“库”,为这些任务提供良好的实用程序类,例如Google Guava

Splitter.on(' ').split("foo bar")

答案 1 :(得分:0)

您可以使用String.split()方法。

   String[] sa= str.split(" ");

答案 2 :(得分:0)

您应该使用带有自定义分隔符的csv阅读框架。你会更快,并且维护的代码更少。

Open CSV看起来最成熟,但您也应该注意apache commons csv

答案 3 :(得分:0)

根据您的问题,我假设输入字符串的格式不会改变。基于此提供了代码片段。

  

如何获取这些空格分隔值?

String values[] = new String[9];
bool addingSpace = false;
String value = "";
int ind = 0;
for(int i=0; i<str.length; i++)
{
    char indexValue = str.charAt(i);
    if(Character.isWhitespace(indexValue))
    {
        if(!addingSpace)
        {
            values[ind++] = value;
            value = "";
        }
        addingSpace = true;
    } 
    else if(Character.isLetter(indexValue))
    {
        if(addingSpace)
        {
            values[ind++] = value;
            value = "";
        }
        addingSpace = false;
    }

    value += indexValue;
}
  

是否可以使用相同的格式再次写入,即将相同的空间量写回此文件?

String values[] = new String[9];

此数组包含完全没有的所有数据。两者之间的空间。如果要写下文件,可以使用相同的数组。