2016-04-04 23 views
0

テキストファイルから文字列を読み込んでいます文字列の置き換え前後の文字列の置換

例:多くのシステムがある国はミシシッピですか?

私はすべての "s" & "S"を同じケース "t"または "T"に置き換えるためにreplaceを使用しようとしています。単語の先頭で、 "s"または " S "には別の" s "または" S "があります。

予想されるアウトプット:ミシシッピ州にはシットレットがたくさんありますか?

私は、出力された... ...

.replaceAll("[^sStT](?!\\b)S", "T").replaceAll("[^SstT](?!\\b)s", "t"); 

を試してみました "T Mtstsippi多くSttetがある状態?"

+0

.replaceAll( "[^ SSTT](?!\\ b)のS"、 "T")。でReplaceAll( "[^ SSTT](?!\\ b)のS"、 "T") ;出力は... "Sttetが多い国、Mtstsippi?" – Hedgebox

+0

それはあなたにどんな出力を与えますか? – Gendarme

+0

コメントではなく、質問に追加情報(コードと出力結果)を追加します。 – RealSkeptic

答えて

1

これは2回のコールで行うことができます。あなたは、その内容を置き換えることなく、パターンを見つけるために見てビハインド(?<=regex)と先読み(?=regex)グループを使用することができますs -> t用とS -> T

に1つ。

sより前の文字が文字のリスト[^<list>]にないことを確認します。このリストは、sS

(?=[^sS])

先読みが同様のチェックを行うが、唯一の次の文字を確認します \\s

(?<=[^^\\ssStT])

開始文字^sStTと空白をされていません含み

これをまとめて:

String test = "Is Mississippi a State where there are a lot of Systems?"; 
System.out.println(test 
     .replaceAll("(?<=[^^\\ssStT])s(?=[^sS])","t") 
     .replaceAll("(?<=[^^\\ssStT])S(?=[^sS])","T") 
); 
1

私はすでに受け入れられた答えがあることを知っていますが、ここでは少しJavaのハックと否定的なlookbehind/afterを使って何をしたいかを達成する別の方法があります。

String s = "Is Mississippi a State where there are a lot of Systems?"; 
s = s.replaceAll("(?<![ sS])(s|S)(?![sS])", Character.isUpperCase("$1".charAt(0)) ? "T" : "t"); 
System.out.println(s); // It Mississippi a State where there are a lot of Syttemt? 
+0

'' $ 1 '.charAt(0) 'が実際にその値を取得する方法が混乱しています。 $ 1'は 'replaceAll'が呼び出される前に評価されますか? – flakes

+0

実際に私は大文字でこれをテストしました!その2番目のパラメータは常にすべての場合に '' t "'として評価されます。あなたは '' $ "' – flakes

+0

@flkesを見ています。解決策になると思いますか? –

関連する問題