Javaの文字列で「#」記号で始まる最初の単語だけを見つけたい。記号と単語の間にスペースを入れることもできません。
文字列「hi#how are#you」は、次のように出力されます。
どうやって
正規表現でこれを試しましたが、それでも適切なパターンを見つけることができませんでした。これについて私を助けてください。
ありがとう。
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{
}
出力: 方法
これを試して
replaceFirst("^.*?(#\\S+).*$", "$1");
正確には美しくはありませんが、機能するはずです。
これは、文字列にそのようなトークンがあることを前提としています。一致しない場合は、トークンを抽出する前に、正規表現と一致するかどうかを確認することをお勧めします。
matches("^.*?(#\\S+).*$");
このメソッドはで一致することに注意して"#sdfhj"
ください"sdfkhk#sdfhj sdf"
。
このような場合を除外する場合は、正規表現をに変更できます"^.*?(?<= |^)(#\\S+).*$"
。
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
この正規表現を試すことができます:
"[^a-zA-Z][\\S]+?[\\s]"
その場合、あなたが探している特定のキャラクターを知らない限り
"#[\\S]+?[\\s]"