0

単純な問題に見えますが、ここで何か助けていただければ幸いです。

パスワード値 (任意の値) を " * *** "に交換する必要があります

元の文字列は xml から復元された文字列です

問題は、出力のみの行として取得することです:

         <parameter><value>*****</value></parameter>

しかし、パスワード値を置き換えてのみ、出力として文字列全体が必要です

前もって感謝します

        String originalString = "<parameter>" +
            "<name>password</name>"+
            "<value>my123pass</value>"+
            "</parameter>"+
            "<parameter>"+
            "<name>LoginAttempt</name>"+
            "<value>1</value>"+
            "</parameter>";
    System.out.println("originalString: "+originalString);                         
    Pattern pat = Pattern.compile("<name>password</name><value>.*</value>");
    Matcher mat = pat.matcher(originalString);

    System.out.println("NewString: ");
    System.out.print(mat.replaceFirst("<value>***</value>"));
    mat.reset();  
4

1 に答える 1

0

私が間違っていなければ、* で囲まれた文字列のパスワードを変更する必要があります。String メソッドを直接使用してそれを行うことができます。開始値タグの最後のインデックスを取得し、「<」に到達するまで繰り返し、これら 2 つの間の値を * に置き換えます。このようなもの:

int from = originalString.lastIndexOf("<name>password</name><value>");
bool endIteration = false;
for(i = from + 1 ; i < originalString.length() && !endIteration ; i ++) {
    if(originalString.toCharArray()[i] == '<')
        endIteration = true;
    else {
        originalString.toCharArray()[i] = '*';
    }
}

編集:すべての String クラスのグッズを適切に使用する別の方法があります。

int from = originalString.lastIndexOf("<name>password</name><value>");
int to = originalString.indexOf("</value>", from);
Arrays.fill(originalString.toCharArray(), from, to, '*');
于 2012-05-06T14:30:11.507 に答える