黑马程序员技术交流社区

标题: 毕老师第二天第10个视频中有关转义字符 求解 [打印本页]

作者: 郝勇    时间: 2013-3-15 20:40
标题: 毕老师第二天第10个视频中有关转义字符 求解
本帖最后由 郝勇 于 2013-3-16 07:29 编辑

毕老师的视频中原文是这样的  将 {""hello""} 的双引号体现出来。
     毕老师是这样做的    {"\"hello\""}      
           为什么 不能写成{\""hello"\"}   将最外面的双引号 给转义   难道只能转义 里面的吗?   
   一运行  竟然报四个错误
作者: 马甲大王    时间: 2013-3-15 20:58
java中\是转义字符的意思,好比你想在控制台输出  \
就可以这样System.out.println("\\");
所以说    {"\"hello\""}      \" 转义成了"         所以打印出的结果就是 "hello"
作者: 孙娜    时间: 2013-3-15 21:00
双引号里面的代表的是字符串,你把表示字符串的双引号转义了当然报错。{"\"hello\""} 这样输出的结果是“hello”。双引号不能直接输出,所以在要输出的双引号前面加上转义字符转义。
作者: 张善颖    时间: 2013-3-15 21:01
其实这都没什么多想的,你就记住怎么套用转义字符就行啦,他们是java中的有特殊含义的字符,如果你要用它,必须在前面加一个前缀“\”如换行("\n")、回车("\r")、双引号("\"")、反斜杠("\\")等。按照java的规矩去做就行
作者: 黑马-郑玉元    时间: 2013-3-15 21:01
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。下面有一张表,看看对你理解有帮助!!!
转义字符
       
意义
       
ASCII码值(十进制)
\a
       
响铃(BEL)
       
007
\b
       
退格(BS) ,将当前位置移到前一列
       
008
\f
       
换页(FF),将当前位置移到下页开头
       
012
\n
       
换行(LF) ,将当前位置移到下一行开头
       
010
\r
       
回车(CR) ,将当前位置移到本行开头
       
013
\t
       
水平制表(HT) (跳到下一个TAB位置)
       
009
\v
       
垂直制表(VT)
       
011
\\
       
代表一个反斜线字符''\'
       
092

       
       
\'
       
代表一个单引号(撇号)字符
       
039
\"
       
代表一个双引号字符
       
034
\0
       
空字符(NULL)
       
000
\ddd
       
1到3位八进制数所代表的任意字符
       
三位八进制
\xhh
       
1到2位十六进制所代表的任意字符
       
二位十六进制
作者: 郝勇    时间: 2013-3-15 21:06
孙娜 发表于 2013-3-15 21:00
双引号里面的代表的是字符串,你把表示字符串的双引号转义了当然报错。{"\"hello\""} 这样输出的结果是“he ...

我的意思是说 {"\"hello\""} 是对的!    而这样{      \"       "hello"      \"   }
                                                                  将这个转义         这个也转义        留着中间的 "hello"   不行么   那样输出结果不是应该是   {     ""hello""   }   那也不至于报错吧  难道还有其他的什么规则?

作者: 郝勇    时间: 2013-3-15 21:06
张栓紧 发表于 2013-3-15 20:58
java中\是转义字符的意思,好比你想在控制台输出  \
就可以这样System.out.println("\\");
所以说    {"\"h ...

我的意思是说 {"\"hello\""} 是对的!    而这样{      \"       "hello"      \"   }
                                                                  将这个转义         这个也转义        留着中间的 "hello"   不行么   那样输出结果不是应该是   {     ""hello""   }   那也不至于报错吧  难道还有其他的什么规则?

作者: 郝勇    时间: 2013-3-15 21:12
黑马-郑玉元 发表于 2013-3-15 21:01
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那 ...


这是你给的资料中的一个
039
\"
        
代表一个双引号字符   我知道这是什么意思   现在是要问
{       \"               "hello"              \"     }   
    这个转义                            这个转义             留中间的  不行么!
作者: 郝勇    时间: 2013-3-15 21:14
ZSY555 发表于 2013-3-15 21:01
其实这都没什么多想的,你就记住怎么套用转义字符就行啦,他们是java中的有特殊含义的字符,如果你要用它, ...

是啊  但是那样就剩下 死记硬背了,效果不会很好,其实  适当的转牛角尖   也是件好事
作者: 马甲大王    时间: 2013-3-15 21:38
这个转义是字符串,必须在字符串中的,
如果 {\"       "hello"      \"  } 这样写,则\" java虚拟机会把它当成对象的引用的,显然不是这个情况。
作者: 郝勇    时间: 2013-3-15 21:46
张栓紧 发表于 2013-3-15 21:38
这个转义是字符串,必须在字符串中的,
如果 {\"       "hello"      \"  } 这样写,则\" java虚拟机会把它 ...

不是很理解
则\" java虚拟机会把它当成对象的引用的,显然不是这个情况。       这句话  能否详细讲解     不是这个情况   那应该是什么情况      当成对象的引用  这句话  搞不懂
作者: 黑马-郑玉元    时间: 2013-3-15 21:58
郝勇 发表于 2013-3-15 21:12
这是你给的资料中的一个
039
\"

这应该是java的编译机制与运行结果打印在控制台的原则问题。就像是exception和runtimException,一个是编译异常,一个是运行异常。再回到你说的这个,在编译的时候,java虚拟机它可能识别不出,所以会报错,而换了位置之后,编译通过之后,再把其打印在控制台上时,它就能识别出来了。我就只能这样理解了!才疏学浅,实在是不好意思,要是有更权威的解释,也请告诉一声!
作者: 郝勇    时间: 2013-3-15 22:07
黑马-郑玉元 发表于 2013-3-15 21:58
这应该是java的编译机制与运行结果打印在控制台的原则问题。就像是exception和runtimException,一个是编 ...

好的  其实  你比我强多了  希望   有大神能来解决这个小烦恼!
作者: 孙娜    时间: 2013-3-15 22:12
郝勇 发表于 2013-3-15 21:06
我的意思是说 {"\"hello\""} 是对的!    而这样{      \"       "hello"      \"   }
                  ...

你想让{      \"       "hello"      \"   }输出""hello""吧,那你需要把\"用单引号或者双引号引起来,我的理解是转义后就是字符了,你能直接输出字符或者字符串吗,不能吧,字符用单引号引起来可以输出,字符串用双引号引起来可以输出。还有多个字符串连接用+,所以你非要那么写的话,可以这么改一下就不报错了:{     ” \"“+ "hello"+”\"“   }

作者: 郝勇    时间: 2013-3-15 22:20
孙娜 发表于 2013-3-15 22:12
你想让{      \"       "hello"      \"   }输出""hello""吧,那你需要把\"用单引号或者双引号引起来,我 ...

谢谢了   真心感谢                                       我的理解是转义后就是字符了,你能直接输出字符或者字符串吗,不能吧,字符用单引号引起来可以输出,字符串用双引号引起来可以输出。还有多个字符串连接用+,   这几句说道点子上了      可以好好睡觉啦!

作者: 孙娜    时间: 2013-3-15 22:21
郝勇 发表于 2013-3-15 22:20
谢谢了   真心感谢                                       我的理解是转义后就是字符了,你能直接输出字 ...

很高兴能帮到你,共同学习,共同进步:)
作者: 郝勇    时间: 2013-3-15 22:23
黑马-郑玉元 发表于 2013-3-15 21:58
这应该是java的编译机制与运行结果打印在控制台的原则问题。就像是exception和runtimException,一个是编 ...

14#的正解  我感觉  说的正是我那个问题,你可以去看看  我自己迷在了    什么东西可以在输出语句中直接输出  你能直接输出字符或者字符串吗,不能吧,字符用单引号引起来可以输出,字符串用双引号引起来可以输出。还有多个字符串连接用+,    她这句话说的很对       不管怎样,谢谢大家了!
作者: 郝勇    时间: 2013-3-15 22:26
孙娜 发表于 2013-3-15 22:21
很高兴能帮到你,共同学习,共同进步

我现在才开始在论坛上这么做  第一天  第一个问题    感觉很棒    还是这样互动着学好啊   一起进步!
作者: 黑马-郑玉元    时间: 2013-3-15 22:31
郝勇 发表于 2013-3-15 22:23
14#的正解  我感觉  说的正是我那个问题,你可以去看看  我自己迷在了    什么东西可以在输出语句中直接 ...

好的!!谢谢!!
作者: 薛飞    时间: 2013-3-15 23:05
如果是(\""hello"\"),其中“”是系统输出用来识别字符串的,当你把第一个引号转义后,这个引号就它变成一个转义字符,此时要输出这个字符,就必须要加单引号或者加双引号,否则编译器会因语法错误而报错。例如:System.out.println('\"'+"hello"+'\"');你要转义第一个引号,改为这样就OK了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2