0
String pw="pw:(abc)";//Maybe "pw:(12)","pw:(ab123)"...
pw=pw.replaceFirst("\\(.+\\)", "*");

//pw == result:pw:*

結果が欲しい:pw:*****。x5(abc)である必要があります*

コンテンツの長さに等しい量のアスタリスクが一致します

それを実装する方法を使用できますString.replaceFirstか、それとも唯一の方法ですか?String.replaceAll

4

3 に答える 3

2
    String var = "lalala(pw:)()pw:(abc12)lalala()(pw:(a12)pw:() lala";

    for(;;){
        String oldVar= var;
        var = var.replaceAll("(pw\\:\\()([*]{0,})([a-zA-Z0-9]{1})(.{1,})", "$1$2*$4");
        if(oldVar.equals(var)){
            break;
        }
    }
    var = var.replaceAll("(pw\\:)\\(([*]{1,})\\)","$1*$2*");
    System.out.println(var);


RESULT: lalala(pw:)()pw:*******lalala()(pw:*****pw:() lala
于 2012-11-29T14:46:44.923 に答える
1

あなたはこれを行うことができます:

final String pw = "pw:(abc)";

final String anon = pw.replaceAll("[^pw:]", "*");

System.out.println(pw);
System.out.println(anon);

結果は次のようになります。

pw:(abc)
pw:*****

編集: パスワードに p/w/: が含まれていると機能しません...修正を試みます..

編集#2:これは私が思っていたよりも難しいことが判明し、別のアプローチを取らなければなりませんでした:

    final String input = "pw:(abc) something!";

    Matcher matcher = Pattern.compile("\\(.*\\)").matcher(input);

    if (matcher.find()) {
        final String onlyPw = matcher.group();
        final String stars = StringUtils.repeat("*", onlyPw.length());

        System.out.println(input.replace(onlyPw, stars));
    }

したがって、まず「({something})」で構成される文字列を見つけます。次に、この文字列の星の数で構成される文字列を作成します。次に、文字列を入力の星に置き換えます。

注:パスワードまたは ) の後のテキストに括弧が含まれている場合、これは機能しませんが、同様の正規表現が見つかるとは思えません..

于 2012-11-29T14:27:33.640 に答える
0
String resultString = null;
try {
    Pattern regex = Pattern.compile( "pw:\\((.*?)\\)", Pattern.CANON_EQ );
    Matcher regexMatcher = regex.matcher( subjectString );
    if (regexMatcher.find()) {
        resultString = regexMatcher.group();
        return resultString.length();
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
于 2012-11-29T14:13:40.410 に答える