如何替换字符串中的“\”?

newcomer1983 2010-11-06 11:46:26
有一个字符串传是这样的
String str ="c:\new\test.txt";
如何才能把“\” 替换成“@”
...全文
244 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
所替换的东西,并不是你在 str 变量值中看到的东西,特别是“\”这个特殊的转义字符!
  • 打赏
  • 举报
回复
采用八进制字符只允许这样的形式:

1:\<0~7>
2:\<0~7><0~7>
3:\<0~3><0~7><0~7>

也只是说只能表示 Unicode 编码为 U+0000~U+00FF 共 256 个字符
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newcomer1983 的回复:]
str ="a\1b"; 是没错的
楼上的方法都不行。
[/Quote]

"a\1b" 其中的 \1 并不是“\”与“1”两个字符,这是采用八进制形式表示一个字符!与“\001”的意义是一样的!
kfhgajofwensjdf 2010-11-07
  • 打赏
  • 举报
回复
和文件的路径有关,那能不能一用File 类的 文件分割符 seperator
「已注销」 2010-11-07
  • 打赏
  • 举报
回复
像\t \n 这种转义,还可以替换
但是,像\1这种,根本没办法替换
比如 '\060',对于java来说,和'0'在内存里是一样的,你想把 \060替换成 @060么?还是把'0'都替换成@060?



System.out.println("\060");
System.out.println("0");

打印输出都是0
Acesidonu 2010-11-06
  • 打赏
  • 举报
回复
str ="a\1b";str ="a\2b"; str ="a\3b";。。。。。。。。
肯定是错的,赋值是就要变成
str ="a\\1b";str ="a\\2b"; str ="a\\3b";。。。。。。。。
newcomer1983 2010-11-06
  • 打赏
  • 举报
回复
我要处理的不一定就是“str ="c:\new\test.txt";”,
有可能是“str ="a\1b";str ="a\2b"; str ="a\3b";。。。。。。。。”
“\”出现的位置是不固定的,这种情况下如何替换

[Quote=引用 5 楼 hudie1234567 的回复:]
Java code

public class test {
public static void main(String[] args) {
//这里不报错,说明\和后面的字符构成转义字符,
//所以后面先要处理字符串中的转义字符为普通字符,
//也就是说把斜杠变为双斜杠,其后的值不变,
//当然这个字符串是特……
[/Quote]
canshui 2010-11-06
  • 打赏
  • 举报
回复
一种笨方法,分别检测 和 匹配……

String str ="c:\new\test.txt";
str = str.replaceAll("\n", "@n");
str = str.replaceAll("\t", "@t");
茫茫大海 2010-11-06
  • 打赏
  • 举报
回复

public class test {
public static void main(String[] args) {
//这里不报错,说明\和后面的字符构成转义字符,
//所以后面先要处理字符串中的转义字符为普通字符,
//也就是说把斜杠变为双斜杠,其后的值不变,
//当然这个字符串是特殊的,所以只用处理\n和\t,
//在考虑周全的情况下,楼主可以先处理掉所有的转义字符
String str ="c:\new\test.txt";
//替换\n为\\n
str = str.replaceAll("\\n","\\\\n");
//替换\t为\\t
str = str.replaceAll("\\t","\\\\t");
//最后才是替换斜杠,这里的斜杠就成普通字符了
str = str.replaceAll("\\\\","@");
System.out.println(str);
}
}
GoCodingInMyWay 2010-11-06
  • 打赏
  • 举报
回复
反斜杠表示转义,字符串中的\n表示了回车,\t表示了tab键。

所以字符串里没有'\'字符,打印效果为:
c:
ew est.txt

你写斜杠时需要写成'\\'或'/'也行。

这时候你用replace('\\','@')就好了。
newcomer1983 2010-11-06
  • 打赏
  • 举报
回复
现在问题是传过来的字符中本来就含有“/”, 不一定是路径,随便一个str ="a\1c" 也没出错
有什么方便可以替换?
vampireallen 2010-11-06
  • 打赏
  • 举报
回复
你的路径表达是不正确的,文件夹应该用双斜杠,之所以编译没报错是因为\n和\t都是转义字符。

String s = "c:\\new\\test.txt";
System.out.println(s.replaceAll("\\\\", "@"));
Acesidonu 2010-11-06
  • 打赏
  • 举报
回复
String str ="c:\new\test.txt";
应该写成String str ="c:\\new\\test.txt";吧
str.replace('\\', '@');
zmkkobe 2010-11-06
  • 打赏
  • 举报
回复
用正则表达式替换
茫茫大海 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newcomer1983 的回复:]
str ="a\1b"; 是没错的
楼上的方法都不行。
[/Quote]
也不是你原来表示的意思,是转义后的了!
Acesidonu 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newcomer1983 的回复:]
str ="a\1b"; 是没错的
楼上的方法都不行。
[/Quote]
str ="a\1b"; 没错是因为 \1 可以转义,你换个str ="a\db";试试有没有错。
茫茫大海 2010-11-06
  • 打赏
  • 举报
回复
是被转义了,上面写错了!
茫茫大海 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 newcomer1983 的回复:]
str ="a\1b"; 是没错的
楼上的方法都不行。
[/Quote]
你输出试试,那个也没转义了!
dotnetshj 2010-11-06
  • 打赏
  • 举报
回复
使用Replace方法
newcomer1983 2010-11-06
  • 打赏
  • 举报
回复
str ="a\1b"; 是没错的
楼上的方法都不行。
加载更多回复(2)

62,614

社区成员

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

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