1

次のような行を含むファイルがあるとします。

Hayden
y

「y」のみを含み、Haydenを含む行を操作したくない場合、これをどのように実行しますか?

だから私はファイルを読み、それを行ごとに解析します。行に「y」の前後の文字が含まれている場合、それは私が探している行ではありません。

私は次のことができると思いました:

String value = "y"; 
if(strLine.matches("[a-zA-Z]" + value + "[a-zA-Z]"))
{
      don't manipulate line here
}
else
{
   manipulate string here
}

ただし、これは「y」だけでなく「Hayden」も取得します

何か案は?

編集

申し訳ありませんが、もっと明確にすべきでした。前にスペースや記号があってもかまわない場合はどうなりますか?または後ろ?特に私が注意する必要があるのは文字です。たとえば、私はyhを持つことはできませんが、y=を持つことはできます...もう一度申し訳ありません

4

5 に答える 5

4

ネガティブルックアラウンドを使用できます:

if (strLine.matches("^.*(?<![a-zA-Z])y(?![a-zA-Z]).*$")) { 
    // manipulate string here
}

アンカーはオプションですが、わかりやすくするためにとにかく含まれています。

于 2012-08-05T22:44:51.337 に答える
3

次を使用できます。

strLine.matches("^y$")

記号、つまり英数字以外の文字を無視するには、次を使用します。

strLine.matches("^\\W*y\\W*$")
于 2012-08-05T22:44:59.307 に答える
1

多分これはあなたが探しているものです

String[] lines={"Hayden","y"," y*","y=","y+"," +y..."};
for (String s:lines)
    System.out.println(s+"->"+s.matches("\\W*y\\W*"));

出力:

Hayden->false
y->true
 y*->true
y=->true
y+->true
 +y...->true
于 2012-08-05T22:51:44.987 に答える
0

正規表現を使用する場合は、もう少し具体的にする必要があります。

  • yy行のどこにでも一致します。
  • ^y$y文字列の終わりの直前(ドル記号)と文字列の始まりの直後(カレット)にあるaに一致します。これにより、に等しい行を一致させることができますy
于 2012-08-05T22:45:02.523 に答える
0

等しいアプローチの拡張:気にしないすべての文字を削除してから、次のように等しいかどうかを確認し"y"ます。

if (strLine.replaceAll("[^a-zA-Z]", "").equals("y")) {
    ...
}
于 2012-08-05T22:52:26.670 に答える