0

文字列操作を行う必要があります。最初に、以下のいずれかとして画像パスを取得します。

image = images/registration/student.gif
image = images/registration/student_selected.gif
image = images/registration/student_highlighted.gif

文字列の画像パスを操作して、2 つの異なる画像パスを取得する必要があります。

1 つは、パスを次のように取得することです。

image1 = images/registration/student.gif

そのために、以下の関数を使用しました。

private String getImage1(final String image) {
    String image1 = image;
    image1 = image.replace("_highlight", "");
    image1 = image.replace("_selected", "");
    return image1;
}

必要な2番目の画像パスは、パスを取得することです:

image2 = image = images/registration/student_selected.gif

image2出力を取得するために使用した関数は次のとおりです。

private String getImage2(final String image) {
    String image2 = image;
    boolean hasUndersore = image2.matches("_");
    if (hasUndersore) {
        image2 = image2.replace("highlight", "selected");
    } else {
        String[] words = image2.split("\\.");
        image2 = words[0].concat("_selected.") + words[1];
    }
    return image2;
}

しかし、上記の方法では期待した結果が得られませんでした。誰でも私を助けることができますか?どうもありがとう!

4

4 に答える 4

2

match()の代わりにindexOf(...)を使用できます。matchは、文字列全体を正規表現と照合します。

for (final String image : new String[] { "images/registration/student.gif", "images/registration/student_highlight.gif",
                "images/registration/student_selected.gif" }) {

            String image2 = image;
            final boolean hasUndersore = image2.indexOf("_") > 0;
            if (hasUndersore) {
                image2 = image2.replaceAll("_highlight(\\.[^\\.]+)$", "_selected$1");
            } else {
                final String[] words = image2.split("\\.");
                image2 = words[0].concat("_selected.") + words[1];
            }
            System.out.println(image2);
        }

これにより、期待どおりの出力が得られます。

ところで、画像のファイル名にも文字列「highlight」を含めることができるため、replaceAll(..)正規表現を変更しました。例えばstuhighlight_highlight.jpg

于 2012-06-27T11:53:26.883 に答える
1

私が正しく理解していれば、それぞれの関数から以下の出力が必要です

"images/registration/student.gif"-> getImage1(String) 
"images/registration/student_selected.gif" -> getImage2(String)

上記の出力を仮定すると、両方の関数 getImage1()-> にいくつかの間違いがあります。

  • 2 番目の置換では、最初の置換の出力である image1 変数を使用する必要があります。
  • 「_highlight」ではなく「_highlighted」を置き換える必要があります

getImage2()->

  • 「_」を検索する必要がある場合は、indexOf 関数を使用します。
  • 「ハイライト」ではなく「ハイライト」を置き換える必要があります

必要な出力を提供する以下のように関数を変更しました

private static String getImage1(final String image) {
    return image.replace("_highlighted", "").replace("_selected", "");
}
private static String getImage2(final String image) {
    if (image.indexOf("_")!=-1) {
        return image.replace("highlighted", "selected");
    } else {
        return image.replace(".", "_selected.");
    }
}
于 2012-06-27T12:08:20.167 に答える
0

まず、 getImage1() はおそらくあなたがやりたいことをしていません。変数 image1 に値を 3 回代入しています。明らかに、最後に割り当てられた値が返されます。

次に、 image2 にアンダースコアが含まれているかどうかはわかりimage2.matches("_")ませ(これは、ここでやろうとしていることだと思います)。

最初に自分でさらにテスト/デバッグを行うことをお勧めします。

于 2012-06-27T11:58:19.307 に答える
0

1.

private String getImage1(final String image) {
  return image.replaceAll("_(highlighted|selected)", "");
}

2.

private String getImage2(final String image) {
  return image.replaceAll(getImage1(image).replaceAll("(?=.gif)", "_selected");
}
于 2012-06-27T12:07:37.707 に答える