昨天我正在处理定制的信件和备忘录。我做了映射关键字,例如:[出生日期],[电子邮件],[员工],[薪水]等,这些关键字将在生成时被替换。
例:尊敬的[员工],您目前的工资是[薪水]。
预期产量:
输出:亲爱的约翰,你现在的薪水是12000。
我使用的是replace eAll()
方法这里是一个代码。
String str = "dear [Employee], your Current Salary is [Salary].";
Map<String,String> vals = new HashMap<String,String>();
vals.put("[Employee]","John");
vals.put("[Salary]","12000");
for(String key:vals.keySet()){
str=str.replaceAll(key,vals.get(key));
}
System.out.println(str);
但问题是:
dJohn1200012000 [JohnJohnJohnJohnJohnJohnJohnJohn], JohnJohnu12000 Cu1200012000Johnnt 1200012000John1200012000John is [1200012000John1200012000John].
我很困惑,谷歌它并试图使它正确,之后我用replace()改变了replaceAll()
EX: str=str.replace(key,vals.get(key));
现在它运行良好。问题是为什么replace all会有这样的行为,replaceAll()
的核心概念是什么,以及何时使用replace()
何时使用replaceAll()
。谢谢
< code>replaceAll()使用正则表达式进行匹配。< br> replace()
使用纯文本匹配。
正则表达式[Employee]
是一个字符类,它匹配任何单个字符,即E
、m
、p
、.l、
o
或E
。
让我们看看replace和replaceAll方法的javadocs。转到javadocs
public String replace(CharSequence target, CharSequence replacement)
将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。替换从字符串的开头进行到结尾,例如,将字符串“aaa”中的“aa”替换为“b”将导致“ba”而不是“ab”。
所以简单地说,它用替换词替换所有的目标词。
public String replaceAll(String regex, String replacement)
将此字符串中与给定正则表达式匹配的每个子字符串替换为给定替换。
为了理解给定的行为,理解正则表达式的工作原理很重要。正则表达式本身就是一个世界,但是,我们可以在这里讨论给定的正则表达式。
方括号将一组字符组合在一起。调用时,该集合中的任何字符都会匹配。
例如:[abc]将匹配所有a、b和c。由于replaceAll使用正则表达式进行匹配,因此它将用替换字符串替换所有a、c和b。
在讨论你的问题之前,我希望你了解Java API的String #格式。有了它,你可以简单地写
String formattedString = String.format("dear %s, your Current Salary is %.2f", "John", 12000.45);
System.out.println(formattedString);
如果您自己在不可避免的情况下执行此操作,则 replaceAll
会将第一个参数视为正则表达式,而不是要替换的普通字符串。
来自 replaceAll 的文档。
将此字符串中与给定正则表达式匹配的每个子字符串替换为给定替换。
由于您的参数由[
and]
组成,并且它们与其中的每个字符匹配。
如果您摆脱了该 []
并使用任何其他非元字符的特殊字符来表示 ex #,它将起作用
。
String str = "dear #Employee#, your Current Salary is #Salary#.";
Map<String, String> vals = new HashMap<String, String>();
vals.put("#Employee#", "John");
vals.put("#Salary#", "12000");
for (String key : vals.keySet()) {
str = str.replaceAll(key, vals.get(key));
}
System.out.println(str);
给你
dear John, your Current Salary is 12000.
或者像你最后说的那样简单地使用替换()
。
问题内容: 我想从字符串中删除方括号,但我不知道如何。 但是我的结果是:[克里斯曼| 1]方括号不会被删除。 我尝试使用其他正则表达式:, 但结果相同,方括号仍附加在字符串上。 编辑: 我试过了: 现在我得到: 问题答案: replaceAll方法正在尝试匹配尝试单独替换这些项目时不存在的String文字。
问题内容: 如何替换字符串中不符合条件的所有字符。我在使用NOT运算符时遇到了麻烦。 具体来说,我正在尝试删除所有非数字字符,到目前为止,我已经尝试过: 问题答案: 解释一下:字符类开头的^将使该类取反,但必须在类内部才能起作用。字符类外部的相同字符是字符串/行开头的锚点。 您可以尝试以下方法:
问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要
问题内容: 我想用字符替换Java字符串中的所有字符。因此,无论它是什么字符都无关紧要,应将其替换为。 我知道互联网上有很多例子,但是没有一个例子可以代替每个角色,我已经尽力了,但没有成功。 问题答案: Java 11及更高版本 注: 这将替换换行符用。如果要保留,请参见下面的解决方案。 Java 10及更早版本 这样可以 保留 换行符。 要在Java 10和更早的版本中也用换行符替换,可以使用:
在卸载时,需要恢复从注册中的某个项目中删除掉添加的内容,这可以使用字符串替换来实现,即使用空串替换掉添加的内容就可以了。NSIS本身提供的字符串函数是很少的,大多数字符串函数都是借助它强大的宏功能实现的。字符串替换可以使用StrRep来实现。StrRep函数包含在StrFunc.nsh文件中。在NSIS的例子中,有一个StrFunc.nsi就是介绍如何使用这些函数的。要实现字符串函数,需要包含St
主要内容:replace() 方法,replaceFirst() 方法,replaceAll() 方法在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法。 replace() 方法 replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串),其语法格式如下: 其中,oldChar 表示被替换的字符串;newChar 表示用于替换的字符串。repla