1

このメソッドは、コードベースの「Utils」タイプのクラス内で見つかりました。それはずっと前に私たちのために働いていない開発者によって書かれました。ターネーションで何をしているのですか?何が戻ってくるの?!?もちろん、JavaDocsやコメントはありません。

public static String stripChars(String toChar, String ptn){
    String stripped = "";
    stripped = toChar.replaceAll(ptn, "$1");
    return stripped.trim();
}

前もって感謝します!

4

5 に答える 5

3

基本的に、これは非常に短いエイリアスです。これ:

stripChars(a, b)

と同等です:

a.replaceAll(b, "$1").trim()
于 2012-10-15T17:15:43.877 に答える
2

正規表現「ptn」に一致する「toChar」のすべてを、「toChar」で一致する最初のグループに置き換えているようです。

正規表現にはグループの概念があります。たとえば、「2012年」を「1012年」に一致させたり、「2006年」を「1007年」に置き換えたり(最初の20を10に変更)することができます。

"year 20([0-9] [9-9])" with "year 20 $ 1"-つまり、文字列全体を一致させてから、 "year 20"に続けて最初のグループ($1)を置き換えます。グループは括弧内の最初のものです。

とにかく、メソッドは「toChar」の「ptn」に一致するすべてのものを正規表現「ptn」の最初のグループに置き換えます。したがって、stripChars( "year 2012"、 "year 20([0-9] [9-9]");を指定すると、テキスト全体が一致し、最初のグループのみに置き換えられるため、"12"のみが返されます。

次に、先頭または末尾の空白をトリップします。

于 2012-10-15T17:17:51.547 に答える
1

これは、一致する文字replacingを独自subsetに使用し、両端からスペースをトリミングした文字列です。

Foの例

したがって、単語をその単語の一連の数字に置き換えたい場合

正規表現を使用する\b.*?(\d*).*?\b

そしてブーム、あなたのreplaceAll方法はこれらの結果を与えるでしょう

hey123wow->123
what666->666
how888->888

$0この例では、一致した文字列全体、つまりhey123wow、、を指します what666how888

$1(\d*)この例ではgroup.ieを指します。つまり123、、、666888

$2この例には存在しない2番目のグループを参照します。

于 2012-10-15T17:14:41.263 に答える
1

引数メソッドとして渡されたパターン文字列には、一致するグループが含まれているようであり、replace all を呼び出すと、最初のグループに一致した部分でパターンへの一致全体が置き換えられます。このメソッドの呼び出し階層を探して、処理中の文字列とともにメソッドに渡されたいくつかの正規表現を見つける必要があります。

于 2012-10-15T17:16:04.663 に答える
0
toChar.replaceAll(ptn, "$1");

ptninのすべての発生を、それがどこにあるかわからないtoCharキャプチャされたグループに置き換えます。$1

キャプチャグループは内部のパターンbrackets ()です:-

以下の正規表現のEGの場合:-

"(\\d+)(cd)"

  • $0完全一致を示します
  • $1最初のキャプチャグループを示します(\\d+
  • $22番目のキャプチャグループを示します(cd

    String str1 = "xyz12cd";
    
    // This will replace `12cd` with the first capture group `12`
    str1 = str1.replaceAll("(\\d+)(cd)", "$1"); 
    System.out.println(str1);
    

の詳細についてRegular Expressionは、次のリンクを参照してください。-

于 2012-10-15T17:18:49.140 に答える