Java 使用replaceAll或模式匹配器替换字符串
我需要用“东部时间上午8:00-下午5:00”替换一个字符串,例如“东部时间上午8:00-下午5:00” 我已经尝试了以下代码,但它不工作Java 使用replaceAll或模式匹配器替换字符串,java,string,replace,Java,String,Replace,我需要用“东部时间上午8:00-下午5:00”替换一个字符串,例如“东部时间上午8:00-下午5:00” 我已经尝试了以下代码,但它不工作 time.replaceAll("AM", "AM ET"); time.replaceAll("PM", "PM ET"); convertedTime = time; System.out.println(convertedTime); // didnt get replaced 我试过下面的方法,但没有得到正确的更换 Pattern p = Patt
time.replaceAll("AM", "AM ET");
time.replaceAll("PM", "PM ET");
convertedTime = time;
System.out.println(convertedTime); // didnt get replaced
我试过下面的方法,但没有得到正确的更换
Pattern p = Pattern.compile("(AM)");
Matcher m = p.matcher(time);
StringBuffer sb = new StringBuffer();
while(m.find()) {
m.appendReplacement(sb, "AM ET");
}
m.appendTail(sb);
p = Pattern.compile("(PM)");
m = p.matcher(time);
while(m.find()) {
m.appendReplacement(sb, "PM ET");
}
m.appendTail(sb);
System.out.println("sb: " + sb); // coming as sb: 8:00 AM ET - 5:00 PM8:00 AM - 5:00 PM ET
请告诉我第一种方法不起作用的原因,以及是否可以在第二种方法中进行纠正。当您调用
replaceAll()
方法时,它会返回一个新的字符串和修改后的值-它不会更改原始的字符串
因此,您的代码应该是
String convertedTime = time.replaceAll("AM", "AM ET");
convertedTime = convertedTime.replaceAll("PM", "PM ET");
System.out.println(convertedTime);
甚至这个
String convertedTime = time.replaceAll("AM", "AM ET").replaceAll("PM", "PM ET");
System.out.println(convertedTime);
由于上述代码的简单性,我并不建议您使用基于模式的代码——它太复杂了,无法实现相同的结果。然而,看起来好像你问了,你可能只需要改变你的m=p.matcher(时间)代码>行到m=p.matcher(sb.toString())
,并清除StringBuffer
,以便将第一次修改的结果输入到第二个p.matcher()
方法中,并删除输出中的副本。像这样的
Pattern p = Pattern.compile("(AM)");
Matcher m = p.matcher(time);
StringBuffer sb = new StringBuffer();
while(m.find()) {
m.appendReplacement(sb, "AM ET");
}
m.appendTail(sb);
p = Pattern.compile("(PM)");
m = p.matcher(sb.toString()); // CHANGED
sb = new StringBuffer(); // ADDED
while(m.find()) {
m.appendReplacement(sb, "PM ET");
}
m.appendTail(sb);
System.out.println("sb: " + sb);
但是,正如我所说的,只使用replaceAll()
会更好、更简单。当调用replaceAll()
方法时,它会返回一个新的字符串和修改后的值-它不会更改原始的字符串
因此,您的代码应该是
String convertedTime = time.replaceAll("AM", "AM ET");
convertedTime = convertedTime.replaceAll("PM", "PM ET");
System.out.println(convertedTime);
甚至这个
String convertedTime = time.replaceAll("AM", "AM ET").replaceAll("PM", "PM ET");
System.out.println(convertedTime);
由于上述代码的简单性,我并不建议您使用基于模式的代码——它太复杂了,无法实现相同的结果。然而,看起来好像你问了,你可能只需要改变你的m=p.matcher(时间)代码>行到m=p.matcher(sb.toString())
,并清除StringBuffer
,以便将第一次修改的结果输入到第二个p.matcher()
方法中,并删除输出中的副本。像这样的
Pattern p = Pattern.compile("(AM)");
Matcher m = p.matcher(time);
StringBuffer sb = new StringBuffer();
while(m.find()) {
m.appendReplacement(sb, "AM ET");
}
m.appendTail(sb);
p = Pattern.compile("(PM)");
m = p.matcher(sb.toString()); // CHANGED
sb = new StringBuffer(); // ADDED
while(m.find()) {
m.appendReplacement(sb, "PM ET");
}
m.appendTail(sb);
System.out.println("sb: " + sb);
但是,正如我所说的,只使用replaceAll()
尝试重新分配方法返回的字符串会更好、更简单。e、 g.time=time.replaceAll(“AM”、“AM ET”)代码>尝试重新分配方法返回的字符串。e、 g.time=time.replaceAll(“AM”、“AM ET”)代码>