如何用Java代码替换字符串中src属性的未知值为指定内容?
解决Java中替换src属性值的问题
嘿,我来帮你搞定这个替换需求!你之前用substring()的思路确实会漏掉原字符串后半部分的内容,因为只拼接了src之前的内容和替换后的属性,没把结尾的文本加回去。其实用正则表达式来做模式匹配替换,是最省心高效的方案,正好适配你这种固定格式的字符串替换场景。
推荐方案:正则表达式替换
我们可以用正则精准匹配src="任意字符串"这个模式,然后把中间的任意内容替换成你指定的字符串(比如stackoverflow)。
正则表达式说明
我们用的正则是:src="[^"]+"
src=":匹配属性的开头部分[^"]+:匹配任意非双引号的字符,确保我们只捕获src属性内部的内容,不会误匹配到后面的其他双引号":匹配属性结尾的双引号
Java代码示例
public class SrcReplacer { public static void main(String[] args) { // 原始字符串 String string1 = "text1 src=\"arbitrary_string_1\" text2"; String string2 = "text3 src=\"arbitrary_string_2\" text4"; // 指定要替换成的目标字符串 String targetValue = "stackoverflow"; // 执行替换 String updatedString1 = string1.replaceAll("src=\"[^\"]+\"", "src=\"" + targetValue + "\""); String updatedString2 = string2.replaceAll("src=\"[^\"]+\"", "src=\"" + targetValue + "\""); // 输出结果 System.out.println(updatedString1); // text1 src="stackoverflow" text2 System.out.println(updatedString2); // text3 src="stackoverflow" text4 } }
这个方法的好处是:不管原始字符串里有多少个src="..."模式,都会一次性全部替换,而且完全保留原字符串的其他内容,不会出现截断问题。
可选方案:修正substring写法(仅适用于单个src属性)
如果你还是想用substring()来实现,可以通过找到两个关键索引来完成:
- 找到
src=\"的起始位置 - 找到该位置之后第一个双引号的位置
然后把中间的内容替换掉,代码如下:
String original = "text1 src=\"arbitrary string\" text2"; String targetValue = "stackoverflow"; // 找到src属性的起始索引 int srcStartIndex = original.indexOf("src=\""); // 找到src属性值结尾的双引号索引 int endQuoteIndex = original.indexOf("\"", srcStartIndex + 5); // 5是"src=\""的长度 // 拼接新字符串 String updatedString = original.substring(0, srcStartIndex + 5) + targetValue + original.substring(endQuoteIndex); System.out.println(updatedString); // text1 src="stackoverflow" text2
不过这种写法只能处理单个src属性的情况,如果字符串里有多个,就需要循环处理,不如正则方案灵活。
内容的提问来源于stack exchange,提问作者טל חדד
相关产品推荐
相关产品推荐

