如何留住人才。java正则表达式中的点
我的程序如下,如何留住人才。java正则表达式中的点,java,regex,Java,Regex,我的程序如下, /** * @param args */ public static void main(String[] args) { RegularExpressions r = new RegularExpressions(); // TODO Auto-generated method stub String []input = {" Dear [name],\n", "
/**
* @param args
*/
public static void main(String[] args) {
RegularExpressions r = new RegularExpressions();
// TODO Auto-generated method stub
String []input = {" Dear [name],\n",
"\n",
"Thanks for buying the [num] [item].\n",
"We appreciate your patronage\n",
"\n",
"Best, [sales_person]\n"};
HashMap<String, String> dic = new HashMap<String, String>();
dic.put("name", "Anna Bell Smith");
dic.put("num", "eight");
dic.put("item", "Boxes of Soap.");
dic.put("sales_person", "Karmine Smithe");
String []afterChange = r.replace(input, dic);
r.display(afterChange);
}
String [] replace(String []strings, Map<String, String> dict){
String patternStr = ".(";
for(String key:dict.keySet()){
patternStr = patternStr + key + "|";
}
patternStr = patternStr.substring(0, patternStr.length()-1);
patternStr = patternStr+").";
Pattern pattern = Pattern.compile(patternStr);
for(int i=0;i<strings.length;i++){
StringBuffer sb = new StringBuffer();
Matcher matcher = pattern.matcher(strings[i]);
boolean isMatcherFind = false;
while(matcher.find()){
matcher.appendReplacement(sb, dict.get(matcher.group(1)));
isMatcherFind = true;
}
if(isMatcherFind){
strings[i] = sb.toString();
}else{
strings[i] = strings[i];
}
}
return strings;
}
void display(String []str){
for(String s:str){
System.out.println(s);
}
}
}
而我期望输出为
Dear Anna Bell Smith
Thanks for buying the eight Boxes of Soap.
We appreciate your patronage
Best, Karmine Smithe.
这意味着,
点(.)和“\n”
应该保留,而不是用空格替换。我是java 8版本,请告诉我如何保留dot(.)和“\n”
您必须明确使用appendReplacement
和appendTail
。不幸的是,您必须使用StringBuffer
来执行此操作。下面是一个片段:
String content="aaaaaaaaaa";
Pattern pattern = Pattern.compile("a");
Matcher m = pattern.matcher(content);
StringBuffer sb = new StringBuffer();
final int N = 3;
for (int i = 0; i < N; i++) {
if (m.find()) {
m.appendReplacement(sb, "b");
} else {
break;
}
}
m.appendTail(sb);
System.out.println(sb); // bbbaaaaaaa
String content=“aaaaaaaa”;
Pattern=Pattern.compile(“a”);
Matcher m=模式匹配器(内容);
StringBuffer sb=新的StringBuffer();
最终整数N=3;
对于(int i=0;i
根据您有一个循环,该循环反复调用
matcher.find()
来查找字符串中的下一个匹配项;然后调用appendReplacement()
。appendReplacement
的javadoc说明它可以:
幸运的是,有一种方法完全正确地处理了你:你真的应该考虑一个现有的模板引擎,比如FrimaLARK。这个问题已经解决了,真的没有理由重新发明轮子。我相信你的意思是*wheel@JimGarrisonLike Jim说:使用模板引擎。这还有一个额外的优点,那就是你可以将文本保留在你的代码之外,这将使任何非开发人员在需要时更容易更改文本。点在替换字符串中。OP正在搜索的模式中没有点。那你为什么建议反斜杠呢?反斜杠点只会在图案中产生差异,而不会在替换字符串中产生差异。你的回答不正确。
String content="aaaaaaaaaa";
Pattern pattern = Pattern.compile("a");
Matcher m = pattern.matcher(content);
StringBuffer sb = new StringBuffer();
final int N = 3;
for (int i = 0; i < N; i++) {
if (m.find()) {
m.appendReplacement(sb, "b");
} else {
break;
}
}
m.appendTail(sb);
System.out.println(sb); // bbbaaaaaaa