关于replaceAll

7xin 2008-07-05 03:29:54
String str = "hi'dmh 100% a_b= 100\200";
我需要替换后的结果是:
str = "hi\'dmh 100\% a\_b= 100\\200";
我用下面这个,它把hi'dmh 替换成了hi\\'dmh 而不是我想要的 hi\'dmh

str = str.replaceAll("'","\\\\'");

我最后要得到的打印结果应该是:

hi\'dmh 100\% a\_b= 100\\200

' 替换成\'
% 替换成\%
_ 替换成\_
\ 替换成 \\

各位帮我一下吧
...全文
101 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
7xin 2008-07-05
  • 打赏
  • 举报
回复
谢谢各位的解答,呵。
brz97 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 brz97 的回复:]
String str = @"hi'dmh 100% a_b= 100\200";
str = Regex.Replace(str,@"([^a-zA-Z0-9 =]+)",@"\$1");

完全符合楼主要求
[/Quote]

抱歉,不知不觉写成.net的东西了

String str = "hi'dmh 100% a_b= 100\200";

str = str.replaceAll("([^a-zA-Z0-9 =])","\\\\$1");
brz97 2008-07-05
  • 打赏
  • 举报
回复
String str = @"hi'dmh 100% a_b= 100\200";
str = Regex.Replace(str,@"([^a-zA-Z0-9 =]+)",@"\$1");

完全符合楼主要求
xuhaiyang 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fosjos 的回复:]
"hi'dmh 100% a_b= 100\\200".replaceAll("(['%_\\\\])", "\\\\$1")
[/Quote]

正解,\\在输出的时候只会显示一个
fosjos 2008-07-05
  • 打赏
  • 举报
回复
"hi'dmh 100% a_b= 100\\200".replaceAll("(['%_\\\\])", "\\\\$1")
  • 打赏
  • 举报
回复
String str = "hi'dmh 100% a_b= 100\200";

假如:hi'dmh 100% a_b= 100\200 这个是字符串的值,而不是 Java 代码中的意思的话。

在 Java 中应该改为

String str = "hi'dmh 100% a_b= 100\\200";

public class Test {
public static void main(String[] args) {
String str = "hi'dmh 100% a_b= 100\\200";
System.out.println("Old: " + str);
String regex = "(?=['%_\\\\])";
str = str.replaceAll(regex, "\\\\");
System.out.println("New: " + str);
}
}

输出结果:

Old: hi'dmh 100% a_b= 100\200
New: hi\'dmh 100\% a\_b= 100\\200
  • 打赏
  • 举报
回复
这好比要把:

String str = "\u4e00"; 中的 \ 换成 \\ 一样,实际上这里没有 \,在编译时就处理成了一个字符。
而替换操作是在运行期间做的,所以这里的 \ 已经没有了。

\ 在 Java 中是特殊字符,其本身并不表示“\”!
  • 打赏
  • 举报
回复
不可能做到 \200 是个转义字符,表示 \u0080,其在编译后会变成字符,\ 并不存在!
craky 2008-07-05
  • 打赏
  • 举报
回复
你这个需求也太变态了吧,呵呵
craky 2008-07-05
  • 打赏
  • 举报
回复

String str = "hi'dmh 100% a_b= 100\\200";
String regex = "\'|%|_|\\\\";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer("");

while(m.find())
{
int start = m.start();
int end = m.end();
String temp = str.substring(start, end);

if(temp.equals("\'") || temp.equals("\\"))
{
temp = "\\" + temp;
}

m.appendReplacement(sb, "\\\\" + temp);
}

m.appendTail(sb);

//最终结果
String ret = sb.toString();
System.out.println(ret);
7xin 2008-07-05
  • 打赏
  • 举报
回复
帮回一下吧,大人们。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧