java语言 用String的replace方法替换变量值的问题,替换无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java语言 用String的replace方法替换变量值的问题,替换无效相关的知识,希望对你有一定的参考价值。

public class String0210

public static void main(String[] args)

String debugSql = "dfgsdfgsdfgsdfgsdfgsdfgsdfgs > $aa_test_1419 AND dfgsdfgsdfgsdfgs < $aa_test_1410)))";
Map<String, Object> finalParametersMap = new HashMap<String, Object>();
finalParametersMap.put("diao_test_1419", "1419");
finalParametersMap.put("diao_test_1410", "1410");
int startAt = 0;
int endAt = 0;
for (int i = 0; i < finalParametersMap.size(); i++)

startAt = debugSql.indexOf("$");
endAt = debugSql.indexOf("");
String param = debugSql.substring(startAt + 2, endAt);
String value = (String) finalParametersMap.get(param);
StringBuilder sb = new StringBuilder();
sb.append("$").append(param).append("");
debugSql.replace(sb.toString(), value);

System.out.println(debugSql);


期望的结果是
dfgsdfgsdfgsdfgsdfgsdfgsdfgs > 1419 AND dfgsdfgsdfgsdfgs < 1410
实际的结果是
dfgsdfgsdfgsdfgsdfgsdfgsdfgs > $aa_test_1419 AND dfgsdfgsdfgsdfgs < $aa_test_1410)
diao_test_1419 换成 aa_test_1410 笔误,输入错了。



public class YuGiOh

public static void main ( String[] args )

String debugSql = "dfgsdfgsdfgsdfgsdfgsdfgsdfgs > $aa_test_1419 AND dfgsdfgsdfgsdfgs < $aa_test_1410)))";
debugSql = debugSql.replaceAll ("\\\\$\\\\([^\\\\_]+\\\\_)2([^\\\\\\\\\\\\_]+)\\\\", "$2");
System.out.println (debugSql);

追问

大神绝了,佩服!
hashMap里面的value如果在key里面取不到怎么办
也就是必须从hashMap里面才能获得value
这样怎么办

追答

那你就

package test;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class YuGiOh

public static void main ( String[] args )

String debugSql = "dfgsdfgsdfgsdfgsdfgsdfgsdfgs > $aa_test_1419 AND dfgsdfgsdfgsdfgs < $aa_test_1410)))";
String regex = "\\\\$\\\\(([^\\\\_]+\\\\_)2([^\\\\\\\\\\\\_]+))\\\\";
Map<String, Object> finalParametersMap = new HashMap<String, Object> ();
finalParametersMap.put ("aa_test_1419", "1419");
finalParametersMap.put ("aa_test_1410", "1410");
Pattern pattern = Pattern.compile (regex);
Matcher matcher = pattern.matcher (debugSql);
while (matcher.find ())

String key = matcher.group (1);
debugSql = debugSql.replaceAll ("\\\\$\\\\" + key + "\\\\", finalParametersMap.get (key).toString ());

System.out.println (debugSql);

参考技术A 把循环最后一句的 debugSql.replace(sb.toString(), value); 换成 debugSql = debugSql.replace(sb.toString(), value); 就可以了,replace只是替换但是原有字符串不会变,你需要重新赋值一下本回答被提问者采纳 参考技术B String类型好像不能替换把,换成StringBuffer

JAVA中appendReplacement()方法和replaceAll()方法有啥区别。。

JAVA中appendReplacement()方法和replaceAll()方法有什么区别。。都是替换。还都支持正则。是appendReplacement()将替换后的存到缓冲区里吗?JAVA内部结构,每生成一个新的String对象,不就是生成一个StringBuffer对象吗?这俩个方法有什么区别?讲解详细些,谢谢。。

参考技术A appendReplacement()是把字符串放到缓冲区操作的,整体操作之后返回的!
replaceAll()则是一个一个的来进行拆分比较的.
当然你指的是java的
要注意replace 在js中只替换第一个注意要用全局正则
String 跟StringBuffer 是不一样的
String 长度不可变 线程不安全
StringBuffer 长度可变 安全
长度是说jvm 初始化的长度
String 初始化之后如果想改变对象,那么jvm相当于新开辟了内存堆栈付给对象 原来的内存被废止掉
而 StringBuffer 是在原来的堆栈(内存地址)前后直接增加或减少内存 那么指向的还是原来的那片内存
所以要养成习惯 在做字符串的增加减少的时候 习惯用StringBuffer去做
常用的地方就是sql语句形成
两个都关联了效率问题
当然现在大公司都会要求性能 要养成良好的习惯 对你有帮助
参考技术B 下面回答的很棒

以上是关于java语言 用String的replace方法替换变量值的问题,替换无效的主要内容,如果未能解决你的问题,请参考以下文章

在java中replace方法如何使用

关于JAVA的replace方法的问题

JAVA基础 String包装类下 .replace方法的使用以及char和字符序列的使用场景

java 中replace方法?

JAVA中string.replace和string.replaceAll的区别及用法

JAVA中string.replace和string.replaceAll的区别及用法