Java 8编程:读取.ini文件并试图摆脱换行符

Agn*_*roc 7 java ini newline

我正在使用Netbeans IDE.对于学校项目,我需要阅读.ini文件,并获取一些具体信息.

我没有使用ini4j的原因:

  • 我有一个具有相同键值的部分
  • 我有没有键值输入的部分,我必须从中读取信息

示例ini文件:

[Section]

Object1 5 m

number = 12

Object2 6 m
;Comment followed by white line

number = 1\

4
Run Code Online (Sandbox Code Playgroud)

\ 意味着需要忽略下一个命令或白线所以ini文件的最后一部分实际上意味着: number = 14

我的任务:我需要将具有相应长度(米)和数字的对象名称存储到单个字符串中,如下所示:Object1的长度为1m,数字为12

我的问题:我使用带分隔符的扫描程序//Z将整个文件存储到一个字符串中.这是有效的(如果我打印出它给出上面例子的String).

我试过这段代码:

String file = file.replaceAll("(\\.)(\\\\)(\\n*)(\\.)","");
Run Code Online (Sandbox Code Playgroud)

如果我尝试仅删除换行符:

String file = file.replace("\n","");
System.out.println(file);
Run Code Online (Sandbox Code Playgroud)

我得到一个空输出.

提前致谢 !

mar*_*aca 0

你的问题是你需要\在Java字符串正则表达式中转义,所以你需要转义它们两次。这意味着如果你想去掉空行,你必须这样写:

file = file.replaceAll("\\n+", "\n");
Run Code Online (Sandbox Code Playgroud)

如果您知道行\末尾的 a 后面总是跟着一个空行,那么这意味着它实际上后面跟着 2 个换行符,这将给出以下内容:

file = file.replaceAll("\\\\\\n\\n", "");
Run Code Online (Sandbox Code Playgroud)

或(相同):

file = file.replaceAll("\\\\\\n{2}", "");
Run Code Online (Sandbox Code Playgroud)

\\\\将导致\\正则表达式,因此它匹配\并将\\n成为\n并匹配新行字符。

正如@Bohemian 所提到的,最好修复 ini 文件。标准让一切变得更容易。如果您坚持可以使用自己的文件扩展名,因为它实际上是另一种格式。

还可以编写一个正则表达式来直接提取值:

file = file.replaceAll("\\\\\\n\\n", "");
Pattern pattern = Pattern.compile("^ *([a-zA-Z0-9_]+) *= *(.+?) *$");
Matcher matcher = pattern.matcher(file);
while (matcher.find()) {
  System.out.println(matcher.group(1)); // left side of = (already trimmed)
  System.out.println(matcher.group(2)); // right side of = (already trimmed)
}
Run Code Online (Sandbox Code Playgroud)

它比逐行阅读更容易,但性能可能会更差。无论如何,通常这不是问题,因为 ini 文件往往很小。