2

入力として、私のプログラムはIPアドレスを含む文字列を取得します。これは、行区切り文字、つまり1行に1つのIPアドレスで区切られます。私が行う各アドレスを検証するには:

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

次に、文字列の配列をループします。

最後のIPアドレス以外は常に無効だったのはなぜだろうと思っていました。10.1.1.1^Mのように見えることがわかりました

トークンを配列に入れる前に区切り文字を削除するようにjava.lang.String.splitに指示する方法はありますか?または、他にどのようなオプションがありますか?申し訳ありませんが、私はJava忍者ではないので、何時間もグーグルを始める前に皆さんに聞いてみようと思いました。

ありがとうトーマス

4

4 に答える 4

6

問題は、ファイルの区切り文字が"\r\n"であるのに、の値が であるということSystem.getProperty("line.separator")です"\n"。これは、"\r"が区切り文字の一部として扱われないことを意味します。

于 2012-08-09T13:06:49.657 に答える
5

有効なIP アドレスにスペースを含めることはできないaddress.split("\\s+")ため、単に使用しないのはなぜですか?

定義済みの文字クラス

.     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 に答える