我需要做一个字符串操作。最初我将获得一个图像路径作为以下之一:
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;
}
但上述方法并没有给我预期的结果。任何人都可以帮助我吗? 非常感谢!
答案 0 :(得分:2)
你可以使用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);
}
这将为您提供预期的输出。
顺便说一句,我更改了replaceAll(..)正则表达式,因为图像文件名也可以包含字符串“highlight”。例如stuhighlight_highlight.jpg
答案 1 :(得分:1)
如果我理解正确,您需要以下各个功能的输出
"images/registration/student.gif"-> getImage1(String)
"images/registration/student_selected.gif" -> getImage2(String)
假设上述输出,两个函数中的错误很少 getImage1() - >
getImage2() - >
我修改了以下功能,提供了所需的输出
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.");
}
}
答案 2 :(得分:0)
首先,getImage1()可能没有按照您的意愿执行操作。您要为变量image1赋值3次。显然,返回了最后一个赋值。
其次,image2.matches("_")
将不告诉您image2是否包含下划线(我认为这是您在此处尝试做的事情)。
我建议先自己做一些测试/调试。
答案 3 :(得分: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");
}