2

作为输入,我的程序得到一个包含 IP 地址的字符串,由行分隔符分隔,即每行一个 IP 地址。要验证我所做的每个地址:

String[] temp;
temp = address.split(System.getProperty("line.separator"));

然后我循环遍历字符串数组。

我想知道为什么除了最后一个 IP 地址之外的所有地址总是无效的。我发现它们看起来像 10.1.1.1^M

有没有办法告诉 java.lang.String.split 在将令牌放入数组之前删除分隔符?或者我在这里还有什么其他选择?抱歉,我不是 Java Ninja,所以我想在开始搜索几个小时之前先问问你们。

谢谢托马斯

4

4 回答 4

6

问题是文件中的分隔符是"\r\n",但值System.getProperty("line.separator")"\n"。这意味着"\r"不被视为分隔符的一部分。

于 2012-08-09T13:06:49.657 回答
5

你为什么不直接使用address.split("\\s+"),因为有效的 IP 地址不能包含空格?

预定义的字符类

.     Any character (may or may not match line terminators) 
\d    A digit: [0-9] 
\D    A non-digit: [^0-9] 
\s    A whitespace character: [ \t\n\x0B\f\r] 
\S    A non-whitespace character: [^\s] 
\w    A word character: [a-zA-Z_0-9] 
\W    A non-word character: [^\w] 
于 2012-08-09T13:06:12.563 回答
1

看来您使用的回车与平台的回车不同。(例如在 MS-DOS/Windows 上编辑并在 Linux 上运行)

我会\\s+用来打破任意数量的空白。这也将修剪前导或尾随空格。

于 2012-08-09T13:34:05.930 回答
0

您的 line.separator 无效。这取决于您使用的系统:

\n = CR (Carriage Return) // Used as a new line character in Unix
\r = LF (Line Feed) // Used as a new line character in Mac OS
\n\r = CR + LF // Used as a new line character in Windows
于 2012-08-09T13:11:16.437 回答