解决方案 »
- 求Java高手指点 后缀表达式算法问题。 谢谢!
- 关于XML菜鸟问题
- C学的还可以,但还未深入学习C++,能学JAVA吗,如何快速起步?
- 怎么将SWING填加到网页中
- 知道 Designer_v4.1.1_for_Eclipse 3.1.zip 帮忙进来看一下!
- 对话框为什么不在面板的当前位置?
- 文件里面"\uff0c"等串,如何转化GB2312显示?
- 用到什么类、方法?3ks!
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
- 什么地方可以DOWN到Visual Age for Java?
- 一个日志文件过大,要如何读取,才可以保证不会出现内存溢出
- 关于qq中类似编辑个人资料里的功能实现
转义了\ 变为r 了\\\r 就可以了。
\\r 转义了\ ,不是成了字符串值 \r 了吗?s3 把原来的换行符转换成字符串“\r”,打印出来还不是换行? 而 s2 = s.replaceAll("\r", "\r") ,是把换行符转换成换行符,自然是没变化。
我哪里想错了?想不通啊。
String s = "工作\r";
System.out.println("s = "+s);-----> "s"= "工作\\r"
System.out.println("s1 = "+s.replaceAll("\r", "r")); "s.replaceAll("\\r", "r")"= "工作r"
System.out.println("s2 = "+s.replaceAll("\r", "\r"));"s.replaceAll("\\r", "\\r")"= "工作\\r"
System.out.println("s3 = "+s.replaceAll("\r", "\\r"));-----> s.replaceAll("\\r", "\\\\r")"= "工作r"
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}可见是调用了Matcher里的replaceAll方法。
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 sb.toString();
}
return text.toString();
}...
...
... public Matcher appendReplacement(StringBuffer sb, String replacement) { // If no match, return error
if (first < 0)
throw new IllegalStateException("No match available"); // Process substitution string to replace group references with groups
int cursor = 0;
String s = replacement;
StringBuffer result = new StringBuffer(); while (cursor < replacement.length()) {
char nextChar = replacement.charAt(cursor);
if (nextChar == '\\') {//这块对'\'的处理是第一次遇到这个'\',跳过了。直接取后边的字符。
cursor++;
nextChar = replacement.charAt(cursor);
result.append(nextChar);
cursor++;
} else if (nextChar == '$') {
// Skip past $
cursor++; // The first number is always a group
int refNum = (int)replacement.charAt(cursor) - '0';
if ((refNum < 0)||(refNum > 9))
throw new IllegalArgumentException(
"Illegal group reference");
cursor++; // Capture the largest legal group string
boolean done = false;
while (!done) {
if (cursor >= replacement.length()) {
break;
}
int nextDigit = replacement.charAt(cursor) - '0';
if ((nextDigit < 0)||(nextDigit > 9)) { // not a number
break;
}
int newRefNum = (refNum * 10) + nextDigit;
if (groupCount() < newRefNum) {
done = true;
} else {
refNum = newRefNum;
cursor++;
}
} // Append group
if (group(refNum) != null)
result.append(group(refNum));
} else {
result.append(nextChar);
cursor++;
}
} // Append the intervening text
sb.append(getSubSequence(lastAppendPosition, first));
// Append the match substitution
sb.append(result.toString()); lastAppendPosition = last;
return this;
}