Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在任意输入中保留特殊字符的Java代码_Java_Regex_Struts2 - Fatal编程技术网

在任意输入中保留特殊字符的Java代码

在任意输入中保留特殊字符的Java代码,java,regex,struts2,Java,Regex,Struts2,我正在使用Struts2程序,该程序使用电子邮件模板文件构造电子邮件,并使用通过表单字段检索的用户输入替换模板中的某些占位符字符串。正在使用来形成电子邮件 下面是它的样子: InputStream in = getClass().getResourceAsStream("emailTemplate.html"); Scanner scanner = new Scanner( in ); String content = ""; while( scanner.hasNextLine() ) {

我正在使用Struts2程序,该程序使用电子邮件模板文件构造电子邮件,并使用通过表单字段检索的用户输入替换模板中的某些占位符字符串。正在使用来形成电子邮件

下面是它的样子:

InputStream in = getClass().getResourceAsStream("emailTemplate.html");
Scanner scanner = new Scanner( in );
String content = "";
while( scanner.hasNextLine() ) {
    content += parseLine( scanner.nextLine() );
}

// ...

email.setHtmlContent( content );
<table>
<tr><td><b>Request Number:</b></td><td>[REQUEST NUMBER]</td></tr>
<tr><td><b>Est. Completion Date:</b></td><td>[ESTIMATED COMPLETION DATE]</td></tr>
<tr><td><b>Comment:</b></td><td>[COMMENT]</td></tr>
<tr><td><b>Status:</b></td><td>[STATUS]</td></tr>
</table>
parseLine
方法如下所示:

String emailReqNum = //internal code to return number from form;
String emailCompDate = //internal code to return date from form;
String emailComment = //internal code to return comment from form;
String emailStatus = //internal code to return status from form;
String emailServer = //internal code to return server from form;

line = line.replaceAll( "\\[REQUEST NUMBER\\]", emailReqNum );
line = line.replaceAll( "\\[ESTIMATED COMPLETION DATE\\]", emailCompDate );
line = line.replaceAll( "\\[COMMENT\\]", emailComment );
line = line.replaceAll( "\\[STATUS\\]", emailStatus );
line = line.replaceAll( "\\[SERVER\\]", emailServer );
这是电子邮件模板的一部分:

InputStream in = getClass().getResourceAsStream("emailTemplate.html");
Scanner scanner = new Scanner( in );
String content = "";
while( scanner.hasNextLine() ) {
    content += parseLine( scanner.nextLine() );
}

// ...

email.setHtmlContent( content );
<table>
<tr><td><b>Request Number:</b></td><td>[REQUEST NUMBER]</td></tr>
<tr><td><b>Est. Completion Date:</b></td><td>[ESTIMATED COMPLETION DATE]</td></tr>
<tr><td><b>Comment:</b></td><td>[COMMENT]</td></tr>
<tr><td><b>Status:</b></td><td>[STATUS]</td></tr>
</table>
我试着用转义版本替换每个冒犯的特殊角色,但这似乎不起作用,而且看起来很丑陋:

String filtered = emailComment;
filtered.replaceAll("\\","\\\\");
filtered.replaceAll("\\^","\\\\^");
filtered.replaceAll("\\$","\\\\$");
filtered.replaceAll("\\.","\\\\.");
filtered.replaceAll("\\|","\\\\|");
filtered.replaceAll("\\?","\\\\?");
filtered.replaceAll("\\*","\\\\*");
filtered.replaceAll("\\+","\\\\+");
filtered.replaceAll("\\(","\\\\(");
filtered.replaceAll("\\)","\\\\)");
filtered.replaceAll("\\[","\\\\[");
filtered.replaceAll("\\]","\\\\]");
filtered.replaceAll("\\{","\\\\{");
filtered.replaceAll("\\}","\\\\}");
我也玩了一些循环

我最终要做的是检查用户输入的注释,找到任何特殊字符,并可能对它们进行更改,以便parseLine(上面)中的replaceAll方法调用能够成功地替换电子邮件内容中的注释。有什么想法吗

谢谢

编辑:


我想用正则表达式不能有效地解析HTML是有道理的。也许我可以将电子邮件内容变成纯文本,但我不确定这是我的公司想要的。

这并不漂亮,但我最后做的是在
parseline
方法中使用
StringBuilder
来形成HTML,同时合并用户变量

我以后可能会加入FreeMarker,因为它已经包含在Struts2核心中,但由于电子邮件消息非常简单(而且不太可能在短期内改变样式或内容),现在就足够了


谢谢你的建议。

嘿,哇,那是。。。嗯,我希望我早就知道了。谢谢我想这有点让人松了一口气,但挑战仍然在于如何根据独特的字符串生成一封包含自定义内容的电子邮件。你将游向上游。你可以这样做,但如果你不控制输入,你会遇到错误。你是否考虑过使用一些模板引擎(例如FreeMarker)。请参见:。