5

私は持っている

1. This is a  test message

印刷したい

This is a  test message

やっています

String delimiter=".";
String[] parts = line.split(delimiter);
int gg=parts.length;

配列を印刷したいよりも

 for (int k ;k <gg;K++)
    parts[k];

しかし、私の gg は常に 0 です。必要なのは、数字とを削除することだけです。と空白

番号は 1 (または) 5 桁の数字です

4

4 に答える 4

11

"."区切り文字として使用している場合は、文字の特別な意味を壊す必要があります.

正規表現の.文字は「任意の文字」であるため、分割は「任意の文字」に従って分割されているだけです。これは明らかにあなたが求めているものではありません。

"\\."区切り文字として使用

事前定義された文字クラスの詳細については、チュートリアルを参照してください
一般的な正規表現(上記を含む)の詳細については、このチュートリアルを試すことができます


編集
PSあなたがやっていること(番号を削除する)は、String.replaceAll()メソッドを使用してワンライナーで達成できます。

System.out.println(line.replaceAll("[0-9]+\\.\\s+", ""));

出力を提供します

This is a  test message

入力例について。

アイデアは次のとおり[0-9]です。任意の数字です。- は+、0 より大きい任意の数が存在できることを示します。\\.はドット (上記のように改行あり) であり、\\s+は少なくとも 1 つのスペースです。
すべて空の文字列に置き換えられます。

ただし、次のような文字列については注意してください: "1. this is a 2. test"- 「これはテストです」を提供し、「2.」も削除します。

于 2012-09-27T07:13:54.507 に答える
4

次のコードを使用してください..

String delimtor="\\."; // use this because . required to be skipped
String[] parts = line.split(delimtor);

あなたのforループのために。

 for (int k=0 ;k <gg.length;K++)
    parts[k];
于 2012-09-27T07:13:45.507 に答える
2

これを試して

String delimtor = "\\.";

「。」正規表現には特別な意味があります。

于 2012-09-27T07:15:38.307 に答える
1

プレフィックス番号を削除しようとしているだけの場合は、1 行で実行できます。実際に複数のドットに分割するかどうかはわかりません。プレフィックスだけの場合は、1行で実行できます

String s = "1. with single digit";
String s2 = "999. with multiple digits";
String s3 = "999. with multiple digits . and . dots";

assertEquals("with single digit", (s.substring(s.indexOf(".") + 1).trim()));
assertEquals("with multiple digits", (s2.substring(s2.indexOf(".") + 1).trim()));
assertEquals("with multiple digits . and . dots", (s3.substring(s3.indexOf(".") + 1).trim()));
于 2012-09-27T07:20:58.940 に答える