经常使用字符串替换replace或者replaceAll ,而replaceAll是基于正则表达式实现的。
本文重点关注的是批量替换replaceAll方法。
目录
替换源码
错误示例
正确示例
真实示例
替换源码
/**
* Replaces each substring of this string that matches the given <a
* href="../util/regex/#sum">regular expression</a> with the
* given replacement.
*
* <p> An invocation of this method of the form
* <i>str</i>{@code .replaceAll(}<i>regex</i>{@code ,} <i>repl</i>{@code )}
* yields exactly the same result as the expression
*
* <blockquote>
* <code>
* {@link }.{@link
* #compile compile}(<i>regex</i>).{@link
* #matcher() matcher}(<i>str</i>).{@link
* #replaceAll replaceAll}(<i>repl</i>)
* </code>
* </blockquote>
*
*<p>
* Note that backslashes ({@code \}) and dollar signs ({@code $}) in the
* replacement string may cause the results to be different than if it were
* being treated as a literal replacement string; see
* {@link #replaceAll }.
* Use {@link #quoteReplacement} to suppress the special
* meaning of these characters, if desired.
*
* @param regex
* the regular expression to which this string is to be matched
* @param replacement
* the string to be substituted for each match
*
* @return The resulting {@code String}
*
* @throws PatternSyntaxException
* if the regular expression's syntax is invalid
*
* @see
*
* @since 1.4
* @spec JSR-51
*/
public String replaceAll(String regex, String replacement) {
return (regex).matcher(this).replaceAll(replacement);
}
/**
* Replaces every subsequence of the input sequence that matches the
* pattern with the given replacement string.
*
* <p> This method first resets this matcher. It then scans the input
* sequence looking for matches of the pattern. Characters that are not
* part of any match are appended directly to the result string; each match
* is replaced in the result by the replacement string. The replacement
* string may contain references to captured subsequences as in the {@link
* #appendReplacement appendReplacement} method.
*
* <p> Note that backslashes (<tt>\</tt>) and dollar signs (<tt>$</tt>) in
* the replacement string may cause the results to be different than if it
* were being treated as a literal replacement string. Dollar signs may be
* treated as references to captured subsequences as described above, and
* backslashes are used to escape literal characters in the replacement
* string.
*
* <p> Given the regular expression <tt>a*b</tt>, the input
* <tt>"aabfooaabfooabfoob"</tt>, and the replacement string
* <tt>"-"</tt>, an invocation of this method on a matcher for that
* expression would yield the string <tt>"-foo-foo-foo-"</tt>.
*
* <p> Invoking this method changes this matcher's state. If the matcher
* is to be used in further matching operations then it should first be
* reset. </p>
*
* @param replacement
* The replacement string
*
* @return The string constructed by replacing each matching subsequence
* by the replacement string, substituting captured subsequences
* as needed
*/
public String replaceAll(String replacement) {
reset();
boolean result = find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
appendReplacement(sb, replacement);
result = find();
} while (result);
appendTail(sb);
return ();
}
return ();
}
错误示例
// 回车符
“string”.replaceAll("\r","");
// 换行符
“string”.replaceAll("\n","");
// 缩进
“string”.replaceAll("\t","");
// 反斜杠
“string”.replaceAll("\","");
// 回车符
“string”.replaceAll("\\r","");
// 换行符
“string”.replaceAll("\\n","");
// 缩进
“string”.replaceAll("\\t","");
// 反斜杠
“string”.replaceAll("\\","");
正确示例
// 回车符
“string”.replaceAll("\\\\r","");
// 换行符
“string”.replaceAll("\\\\n","");
// 缩进
“string”.replaceAll("\\\\t","");
// 反斜杠
“string”.replaceAll("\\\\","");
真实示例
JSONObject jsonObject;
for (String s : ()) {
String jsonStr = (s).toString();
try{
// 去掉换行、回车、缩进、转义字符
jsonStr = ("\\\\n|\\\\r|\\\\t","");
jsonObject = (jsonStr);
String tableName = ("TABLE_NAME");
for (Map<String, Object> map : userMapList) {
updateUserServiceData(tableName, map);
}
}catch (Exception e){
("JSON转换异常:{}",jsonStr);
();
}
}