2

我正在尝试从配置文件中读取空格分隔值。我正在阅读一个 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

4 回答 4

3

例如,您可以使用从标准 Java 类String中拆分出来的方法。

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

另一种可能性是使用更“高级”的库,如Google Guava,它提供了很好的实用程序类,例如Splitter用于此类任务:

Splitter.on(' ').split("foo bar")
于 2012-10-22T07:31:29.570 回答
0

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

   String[] sa= str.split(" ");
于 2012-10-22T07:31:18.420 回答
0

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

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

于 2012-10-22T07:35:07.330 回答
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];

该数组具有确切编号的所有数据。之间的空间。当你想写到文件时,你可以使用相同的数组。

于 2012-10-22T07:53:56.413 回答