2

?特定のトークン (この場合は) を別のトークン (!または何かで開始できます)に置き換える必要があります。String のreplaceAllメソッドはこれで機能します。しかし、疑問符が token の後に続く場合は、疑問符を置き換えたくありませんaction。(それはまずいでしょう!)

試してみましtext = text.replaceAll("[^a][^c][^t][^i][^o][^n]\\?","!");たが、うまくいきませんでした。

たとえば、私は"test.action?param=lol?omg";に変わりたいですtest.action?param=lol!omg。私は何か愚かなことをすることができることを知っています

text.replaceAll("action\\?","%%%CRAZYTOKEN%%%")
    .replaceAll("\\?","!")
    .replaceAll("%%%CRAZYTOKEN%%%","action?");

しかし、特に大きな文字列では、それは時間の無駄のように思えます。私はむしろそれを正しくしたいです。

4

2 に答える 2

2

あなたは後ろに否定的な見方をする必要があります

text.replaceAll("(?<!action)\\?", "!");

?これは、が従わないことを主張しますaction

于 2012-12-02T00:57:17.817 に答える
2

ゼロ幅の負の後読みアサーションを使用して、従わない?sのみに一致させます。action

text = text.replaceAll("(?<!action)\\?", "!");

\\の前のエクストラに注意してください??は正規表現の特殊文字であるため、エスケープする必要があります。

于 2012-12-02T00:57:33.947 に答える