gpt4 book ai didi

java - 正则表达式从文件名中删除空格

转载 作者:行者123 更新时间:2023-12-02 08:11:01 25 4
gpt4 key购买 nike

我有一些包含图像的 html 字符串。我需要从图像名称中删除空格,因为某些平板电脑不接受它们。 (我已经重命名了所有图像资源)。我认为唯一的修复部分是......

src="file:///android_asset/images/ ??   ?? .???"

因为这些链接是有效链接。

我花了半天时间,仍然在性能问题上苦苦挣扎。以下代码可以工作,但速度非常慢...

public static void main(String[] args) {

String str = "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1 .jpg\" width=350 border=0></P> fd ssda f \r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n";

Pattern p = Pattern.compile("(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")", Pattern.DOTALL);
Matcher m = p.matcher(str);
StringBuilder sb = new StringBuilder("");
int i = 0;
while (m.find()) {
sb.append(m.group(1)).append(m.group(2)).append(m.group(3).replaceAll("\\s+", "")).append(m.group(4));
i = m.end();
}
sb.append(str.substring(i, str.length()));

System.out.println(sb.toString());
}

所以真正的问题是,如何使用正则表达式有效地删除图像名称中的空格。

谢谢。

最佳答案

正则表达式就像正则表达式一样。 :-) 说真的,正则表达式的东西对于真正的特殊情况来说非常有用,但是对于像这样的东西,我发现自己正在编写较低级别的代码。所以以下不是正则表达式;这是一个函数。但它可以满足您的要求,并且比您的正则表达式快得多。 (也就是说,如果有人确实想出了一个符合要求并且性能良好的正则表达式,我很乐意看到它。)

以下函数使用空格作为分隔符对源字符串进行分段,然后通过在组装结果时不附加空格来识别并清理 alt 和 src 属性。我之所以使用 alt 属性只是因为您也将文件名放在那里。一个副作用是,这会将标记其余部分中的多个空格折叠为一个空格,但浏览器无论如何都会这样做。您可以通过重新使用 StringBuilder 来稍微优化代码。它假定属性周围有双引号。

我希望这会有所帮助。

    private String removeAttrSpaces(final String str) {

final StringBuilder sb = new StringBuilder(str.length());
boolean inAttribute = false;
for (final String segment : str.split(" ")) {

if (segment.startsWith("alt=\"") || segment.startsWith("src=\"")) {

inAttribute = true;
}
if (inAttribute && segment.endsWith("\"")) {

inAttribute = false;
}

sb.append(segment);
if (!inAttribute) {

sb.append(' ');
}
}

return sb.toString();
}

关于java - 正则表达式从文件名中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com