java中转义字符和路径符_路径怎么用转义_小小角色熊的博客-程序员秘密

技术标签: java SE  

 

在Java的实际开发中,经常会遇填写一个文件的相对路径或者是绝对路径的问题,对于初学者来说,经常犯难的是到底是用\ 还是用/的问题,本文将彻底解决这个问题的困扰.

先来看要下路径符号在windows系统和再Linux系统写的显示使用的区别: 
Windows下的路径: 
这里写图片描述 
Linux下的路径: 
这里写图片描述

对比可以发现:windows使用的是\ linux使用的是/ 
然而在java的代码开发中\是代表转义字符的,/才是代表路径符号,也就是说java代码中的路径符号与linux下的显示路径符号是一致的.相反在windows下的显示是恰好与java代码中的路径符号是相反的.

当然在java代码中开发时是可以使用转义字符来处理路径符号的: 
String path = "D:\ProgramFiles"; 错 
String path = "D:\\ProgramFiles"; 正确,用了转义符号 
同样是也还是你可以直接使用路径符号来表达的: 
String path = "D:/ProgramFiles"; 正确,路径符号不需要转义

另外需要注意的是Java的转义字符\的转义并不是什么都需要转义,什么都可以转义,它只支持一下转义: 
\b \t \n \f \r \" \' \\

下面是同一段代码在windows环境和linux环境运行对比: 
源码:

public class Test {

    public static void main(String[] args) { // System.out.println("D:\ProgramFiles");//报错,转义符号要接待转义的字符 System.out.println("D:/ProgramFiles"); System.out.println("D:\\ProgramFiles");// 转义后 System.out.println("D://ProgramFiles"); } }

结果对比: 

这里写图片描述 
这里写图片描述 
对比发现编译后显示是没有区别的,主要区别还是在操作系统对路径符号的使用区别.

建议:

  • 考虑的项目的运行环境可能是Linux,也肯能是windows,这里建议大家使用转义的方式来表达路径:String path ="D:\\ProgramFiles";
  • 二:

    JAVA中转义字符: 

    1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377' 
          \0:空字符 
    2.Unicode转义字符:\u + 四个十六进制数字;0~65535 
         \u0000:空字符 
    3.特殊字符:就3个 
          \":双引号 
         \':单引号 
         \\:反斜线 
    4.控制字符:5个 

    \' 单引号字符 

    \\ 反斜杠字符 

    \r 回车 

    \n 换行 

    \f 走纸换页 

    \t 横向跳格 

    \b 退格 

    点的转义:. ==> u002E 
    美元符号的转义:$ ==> u0024 
    乘方符号的转义:^ ==> u005E 
    左大括号的转义:{ ==> u007B 
    左方括号的转义:[ ==> u005B 
    左圆括号的转义:( ==> u0028 
    竖线的转义:| ==> u007C 
    右圆括号的转义:) ==> u0029 
    星号的转义:* ==> u002A 
    加号的转义:+ ==> u002B 
    问号的转义:? ==> u003F 
    反斜杠的转义: ==> u005C 
    ====================================================================== 
    下面的程序使用了两个Unicode的转义字符,它们是用其十六进制代码来表示Unicode字符。那么,这个程序会打印什么呢? 
    Java代码 
    public class EscapeRout{   
        public static void main(String[] args){   
            // \u0022 是双引号的Unicode转义字符   
            System.out.println("a\u0022.length()   
    +\u0022b".length());   
        }   


    public class EscapeRout{ 
        public static void main(String[] args){ 
            // \u0022 是双引号的Unicode转义字符 
            System.out.println("a\u0022.length() 
    +\u0022b".length()); 
        } 



    对该程序的一种很肤浅的分析会认为它应该打印出26,因为在由两个双引号"a\u0022.length()+\u0022b"标识的字符串之间总共有26个字符。 
    稍微深入一点的分析会认为该程序应该打印16,因为两个Unicode转义字符每一个在源文件中都需要用6个字符来表示,但是它们只表示字符串中 的一个字符。因此这个字符串应该比它的外表看其来要短10个字符。 如果你运行这个程序,就会发现事情远不是这么回事。它打印的既不是26也不是16,而是2。

    理解这个谜题的关键是要知道:Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前, 先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一 个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。

    如果该程序的作者确实希望得到这种行为,那么下面的语句将要清楚得多: 


    Java代码 
    System.out.println("a".length()+"b".length()); 

    更有可能的情况是该作者希望将两个双引号字符置于字符串字面常量的内部。使用Unicode转义字符你是不能实现这一点的,但是你可以使用转义字 符序列来实现[JLS 3.10.6]。表示一个双引号的转义字符序列是一个反斜杠后面紧跟着一个双引号(\”)。如果将最初的程序中的Unicode转义字符用转义字符序列来 替换,那么它将打印出所期望的16(错误,应该是14,不知道是怎么会出来16)

    Java代码 
    System.out.println("a\".length()+\"b".length()); 

    许多字符都有相应的转义字符序列,包括单引号(\')、换行(\n)、制表符(\t)和反斜线(\\)。你可以在字符字面常量和字符串字面常量中使用转义字符序列。 
    实际上,你可以通过使用被称为八进制转义字符的特殊类型的转义字符序列,将任何ASCII字符置于一个字符串字面常量或一个字符字面常量中,但是最好是尽可能地使用普通的转义字符序列。

    普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的。 

    ASCII是字符集的最小公共特性集,它只有128个字符,但是Unicode有超过65,000个字符。一个Unicode转义字符可以被用来在只使用ASCII字符的程序中插入一个Unicode字符。一个Unicode转义字符精确地等价于它所表示的字符。

    Unicode转义字符被设计为用于在程序员需要插入一个不能用源文件字符集表示的字符的情况。它们主要用于将非ASCII字符置于标识符、字符 串字面常量、字符字面常量以及注释中。偶尔地,Unicode转义字符也被用来在看起来颇为相似的数个字符中明确地标识其中的某一个,从而增加程序的清晰 度。

    总之,在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode转义字符。Unicode转义字符可能会因为它们在编译序列中 被处理得过早而引起混乱。不要使用Unicode转义字符来表示ASCII字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之 外的情况,应该直接将ASCII字符插入到源文件中。
    ----------------------------------------------------------摘自网络

     

     

     

    java转义字符对照表

    点的转义:. ==> u002E 
    美元符号的转义:$ ==> u0024 
    乘方符号的转义:^ ==> u005E 
    左大括号的转义:{ ==> u007B 
    左方括号的转义:[ ==> u005B 
    左圆括号的转义:( ==> u0028 
    竖线的转义:| ==> u007C 
    右圆括号的转义:) ==> u0029 
    星号的转义:* ==> u002A 
    加号的转义:+ ==> u002B 
    问号的转义:? ==> u003F 
    反斜杠的转义: ==> u005C 

    Java代码

    1. String str2="a$b$c";  
    2. String strs[]=str2.split("$");  
    3. for(String str:strs){  
    4.      System.out.println(str);  
    5. }  

    [java] view plain copy

    1. String str2="a$b$c";   String strs[]=str2.split("$");   for(String str:strs){    System.out.println(str);   }  


    并不会打出 a , b ,c需要转义才可如: 
     

    Java代码

    1. String str2="a$b$c";  
    2. String strs[]=str2.split("\\u0024");  
    3. for(String str:strs){  
    4.      System.out.println(str);  
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaobaixiongxiong/article/details/79320182

智能推荐

zzuli OJ 1097: 计算平均成绩(函数专题)_choujuechong4238的博客-程序员秘密

Description 输入某位同学各门课的成绩,输出平均成绩。输入的成绩均为五级制成绩,五级制成绩转换为百分之成绩的规则如下:'A'转换为百分之成绩为95分,'B'对应85分,C对应75分,'D'对应65分,'E'对应40分。 输出的平均成绩为一个实数,保留1为小数。 Inpu...

node本地服务启动报Error: listen EADDRINUSE(端口占用解决方法)_若~~~的博客-程序员秘密

或许大家也遇到类似情况,使用express本地起一个服务,发现端口被占用,启动失败Error: listen EADDRINUSE 0.0.0.0:8080然后换了一个,发现还是如此,竟然还是被占用,难不成一直换下去?????好吧。辛苦一下,彻底解决掉吧!1.使用快捷键 Win+R 然后输入 cmd 回车,打开CMD窗口2.输入命令:netstat -ano查看所有端口3.输入命令...

js文件格式化_liuqiang5151的博客-程序员秘密

有的从网上下来的js文件打开只有一行现在有个网站,可以格式化jshttp://tool.chinaz.com/Tools/JsFormat.aspx

《思考的技术》—— 阅读内化(3)_Em_workout的博客-程序员秘密

一.这本书的核心观点/思想:这本书是以“逻辑思维”为前提的思考方法论,反复强调的就是对于“假设”的敏感度以及论证,通过“问题”→“假设”→“论证”→“实验”来不断让“假设”成为“结论”;其中,作者强调产生的“问题”大多只是“现象”,而导致这些“现象”的根本原因大多只有一个,而这个根本原因就是我们要作出的“假设”,知道了根本原因,就能导出解决方案;a.这一点和《麻省理工》里提到的“黑盒”的类...

看完这篇电磁兼容分层与综合设计法,EMC你还不懂就没救了_EDA365电子论坛的博客-程序员秘密

摘要按照产品在电磁兼容设计时所采取的各项措施的重要性为先后,分为若干层次进行设计,并加以综合分析进行适当调整直到完善,这就是本文提出的” 电磁兼容分层与综合设计法”。可以做到电磁兼容试验一次成功。人们在研发新产品时,往往急于实现产品的功能,于是沿用低频、低速时的经验,满足于利用软件将单片机、芯片和元器件连接起来,就希望实现产品功能、效能和性能,结果事与愿违,不仅只是在低水平徘徊,而且延误了宝贵...

基于Springboot的人力资源管理系统的设计与实现_专注大学计算机毕设和教育的博客-程序员秘密

基于Springboot的人力资源管理系统 的设计与实现功能需求如下: 基于系统需求分析,人事管理系统主要完成以下功能:系统按所选角色分为职员、管理员两类身份登录功能界面。管理员:1)员薪资料管理:包括查看员工列表、添加员工、修改员工信息等。2) 部门管理:包括部门名单、技术资料修改、新增部门。3)员工考勤管理:添加、修改、删除员工考勤信息。4)员工培训管理:包括个人培训信息查询及添加新的培训记录等。5)假期情况管理:主要用来处理员工的请假申请。6)员工薪资管理:主要用来处.

随便推点

mongodb中数据类型的坑_weixin_33827965的博客-程序员秘密

在mongodb中,我们给每个文档插入数据的时候,mongodb自动会为我们插入的数据创建数据类型。由于mongodb是一个非结构化的数据存储系统,因此在文档中你可以随意插入不同类型的字段,这和MySQL有很大的区别(MySQL是结构化类型存储,要求对应的字段的数据类型相同)。在mongodb的图形化管理页面,来看看数据库中字段所对应的数据类型。由于有数据类型的存在,这就要求我们在使用的m...

shell 截取某个字符串之后的内容_shell截取某个字符后面全部_石宗昊的博客-程序员秘密

字符串示例# Automatically generated for Debian scripts. DO NOT TOUCH![client]host = localhostuser = debian-sys-maintpassword = ID2TNes0UQkO52UGsocket = /var/run/mysqld/mysqld.sock[mysql_upgrade]host = localhostuser = debian-sys-maint

字符串最小表示法 O(n)算法_zy691357966的博客-程序员秘密

求字符串的循环最小表示: 上面说的两个字符串同构的,并没有直接先求出Min(s),而是通过指针移动,当某次匹配串长时,那个位置就是Min(s)。而这里的问题就是:不是给定两个串,而是给出一个串,求它的Min(s),eg:Min(“babba”) = 4。那么由于这里并非要求两个串的同构,而是直接求它的最小表示,由于源串和目标串相同,所以处理起来既容易又需要有一些变化:我们仍然设置两个指针,

latex模板使用记录_latex 设置双面打印_RachelKong的博客-程序员秘密

毕业论文套了一份latex模板,但是格式采用硕士规范,硬生生调成了又丑又蠢的本科生规范。(除了封面)记录一下单双面的调整,正文之前是单面打印,左间距3cm,右间距2cm,正文开始是双面打印,单双面交替,装订部分3cm,外围2cm。想要实现oneside到twoside的切换,试了setboolean的方法,并不能实现,后来用\newgeometry实现了。开头文档属性是设为了oneside boo...

Java对象复制非空属性_奔跑的阳光的博客-程序员秘密

引用org.springframework.beans.BeanUtils类提供的方法copyProperties(Object source, Object target, String... ignoreProperties)  用于对象拷贝,spring 和 Apache都提供了相应的工具类方法,BeanUtils.copyPropertiespackage com.mixislink...

推荐文章

热门文章

相关标签