Java 字符串替换为正则表达式不';我不能正常工作
我试图使用iText操作pdf中的字符串,但我遇到了一个问题,当我在replace方法中设置正则表达式时,它不起作用Java 字符串替换为正则表达式不';我不能正常工作,java,regex,Java,Regex,我试图使用iText操作pdf中的字符串,但我遇到了一个问题,当我在replace方法中设置正则表达式时,它不起作用 PdfReader reader = new PdfReader(src); PdfDictionary dict = reader.getPageN(1); PdfObject object = dict.getDirectObject(PdfName.CONTENTS); if (object instanceof PRStream) {
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
if (object instanceof PRStream) {
PRStream stream = (PRStream)object;
byte[] data = PdfReader.getStreamBytes(stream);
stream.setData(new String(data).replace("^(0?[1-9]|[12][0-9]|3[01])[\\/\\-](0?[1-9]|1[012])[\\/\\-]\\d{4}$", getData()).getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
例如,它应该从2018年12月12日更改为我使用getData()方法获得的日期,但在新的pdf中仍然是2018年12月12日,因此我认为regex不起作用。
您有什么解决方案吗?不支持正则表达式,它将尝试逐字替换您的字符串,请注意string的源代码中的#replace
:
public String replace(CharSequence target, CharSequence replacement) {
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}
您正在寻找的方法是或,这两种方法都将regex作为输入 工作示例:
如果你想要正则表达式替换,你应该
replaceAll
method。对于未来的问题,旁注:“它不起作用”没有多大帮助。您至少应该告诉我们它以什么方式不起作用,即您预期会发生什么以及会发生什么。您还应该提供-您在此处显示的90%以上的代码是冗余的,与您的问题无关。即使使用replaceAll和replaceFirst编辑Post,它也不会work@MassimoSimone它如何“不起作用”?当我使用replaceAll
创建一个最小的正则表达式示例时,输入数据为12/12/2018
,它可以正常工作。是的,我知道,我在线测试了正则表达式,它可以工作,但在我的java程序中,它不会改变我pdf中的字符串,如果我设置一个静态日期,发现它工作正常。@Massimosone你把这个静态日期放在哪里?而不是新字符串(数据)
?或者代替getData()
?代替regex,比如stream.setData(新字符串(data).replaceAll(“12/12/2018”,getData()).getBytes());
String regex = "^(0?[1-9]|[12][0-9]|3[01])[\\/\\-](0?[1-9]|1[012])[\\/\\-]\\d{4}$";
String date = "12/12/2018";
System.out.println(date); // Prints 12/12/2018
date = date.replaceAll(regex, "myNewValue");
System.out.println(date); // Prints myNewValue