0

Javaの文字列で「#」記号で始まる最初の単語だけを見つけたい。記号と単語の間にスペースを入れることもできません。

文字列「hi#how are#you」は、次のように出力されます。

どうやって

正規表現でこれを試しましたが、それでも適切なパターンを見つけることができませんでした。これについて私を助けてください。

ありがとう。

4

4 に答える 4

1
String str ="hi #how are # you";
if (str.contains("#")) {
        int pos = str.indexOf("#");

        while (str.charAt(pos + 1) == ' ')
            pos++;


        int last = str.indexOf(" ", pos + 1);

        str = str.substring(pos + 1, last);
        System.out.println(str);
    }
else{

}

出力: 方法

于 2012-06-07T17:19:49.603 に答える
1

これを試して

replaceFirst("^.*?(#\\S+).*$", "$1");

正確には美しくはありませんが、機能するはずです。

これは、文字列にそのようなトークンがあることを前提としています。一致しない場合は、トークンを抽出する前に、正規表現と一致するかどうかを確認することをお勧めします。

matches("^.*?(#\\S+).*$");

このメソッドはで一致することに注意して"#sdfhj"ください"sdfkhk#sdfhj sdf"

このような場合を除外する場合は、正規表現をに変更できます"^.*?(?<= |^)(#\\S+).*$"

于 2012-06-07T17:22:03.287 に答える
1

xx#xxは間違った言葉だと思います。私は本当ですこれを試してみてください("#(\\w+)"Patternで使用しない場合はm.group(1)代わりにm.group(2)

String str ="ab cd#ef #gh";
Pattern pattern=Pattern.compile("(^|\\s)#(\\w+)");
Matcher m=pattern.matcher(str);
if(m.find())
    System.out.println(m.group(2));
else
    System.out.println("no match found");

結果について"ab cd#ef #gh"->gh

結果について"#ab cd#ef #gh"->ab

于 2012-06-07T17:37:46.767 に答える
0

この正規表現を試すことができます:

"[^a-zA-Z][\\S]+?[\\s]"

その場合、あなたが探している特定のキャラクターを知らない限り

"#[\\S]+?[\\s]"
于 2012-06-07T17:19:01.663 に答える