0

我需要对字符串进行操作。最初,我将获得如下之一的图像路径:

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

我需要操纵字符串图像路径以获得2个不同的图像路径。

一种是获取路径:

image1 = images/registration/student.gif

为此,我使用了以下功能:

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

我需要的第二个图像路径是获取路径:

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

您可以使用 indexOf(...) 而不是 match()。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);
        }

这会给你预期的输出。

顺便说一句,我更改了 replaceAll(..) 正则表达式,因为图像文件名也可以有字符串“highlight”。例如stuhighlight_highlight.jpg

于 2012-06-27T11:53:26.883 回答
1

如果我理解正确,您需要以下各个功能的输出

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

假设上面的输出,两个函数 getImage1()-> 几乎没有错误

  • 在第二次替换中,您需要使用 image1 变量,它是第一次替换的输出。
  • 您需要替换“_highlighted”而不是“_highlight”

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.matches("_")不会告诉您 image2是否包含下划线(我认为这是您在这里尝试做的)。

我建议先自己做更多的测试/调试。

于 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 回答