下面的程序被设计用来打印它的类文件的名称。如果你不熟悉类字面常量,那么我告诉你Me.class.getName()将返回Me类完整的名称,即“com.javapuzzlers.Me”。那么,这个程序会打印出什么呢?
package com.javapuzzlers;
public class Me {
public static void main(String[] args){
System.out.println(
Me.class.getName().
replaceAll(".","/") + ".class");
}
}
该程序看起来会获得它的类名(“com.javapuzzlers.Me”),然后用“/”替换掉所有出现的字符串“.”,并在末尾追加字符串“.class”。你可能会认为该程序将打印com/javapuzzlers/Me.class,该程序正式从这个类文件中被加载的。如果你运行这个程序,就会发现它实际上打印的是///////////////////.class。到底怎么回事?难道我们是斜杠的受害者吗?
问题在于String.replaceAll接受了一个正则表达式作为它的第一个参数,而并非接受了一个字符序列字面常量。(正则表达式已经被添加到了Java平台的1.4版本中。)正则表达式“.”可以匹配任何单个的字符,因此,类名中的每一个字符都被替换成了一个斜杠,进而产生了我们看到的输出。
要想只匹配句点符号,在正则表达式中的句点必须在其前面添加一个反斜杠(\)进行转义。因为反斜杠字符在字面含义的字符串中具有特殊的含义——它标识转义字符序列的开始——因此反斜杠自身必须用另一个反斜杠来转义,这样就可以产生一个转义字符序列,它可以在字面含义的字符串中生成一个反斜杠。把这些合在一起,就可以使下面的程序打印出我们所期望的com/javapuzzlers/Me.class:
package com.javapuzzlers;
public class Me {
public static void main(String[] args){
System.out.println(
Me.class.getName().replaceAll("\\.","/") + ".class");
}
}
为了解决这类问题,5.0版本提供了新的静态方法java.util.regex.Pattern.quote。它接受一个字符串作为参数,并可以添加必需的转义字符,它将返回一个正则表达式字符串,该字符串将精确匹配输入的字符串。下面是使用该方法之后的程序:
package com.javapuzzlers;
import java.util.regex.Pattern;
public class Me {
public static void main(String[] args){
System.out.println(Me.class.getName().replaceAll(Pattern.quote("."),"/") + ".class");
}
}
该程序的另一个问题是:其正确的行为是与平台相关的。并不是所有的文件系统都使用斜杠符号来分隔层次结构的文件名组成部分的。要想获取一个你正在运行的平台上的有效文件名,你应该使用正确的平台相关的分隔符号来代替斜杠符号
分享到:
相关推荐
D:\002 我的工具类\001 流 D:\002 我的工具类\001 流\文件操作整体 D:\002 我的工具类\001 流\文件操作整体\FileEncodingUtil.java D:\002 我的工具类\001 流\文件操作整体\FileReadImpl.java D:\002 我的工具类\001...
微信小程序 小游戏类 你画我猜 (源代码+截图)微信小程序 小游戏类 你画我猜 (源代码+截图)微信小程序 小游戏类 你画我猜 (源代码+截图)微信小程序 小游戏类 你画我猜 (源代码+截图)微信小程序 小游戏类 你画...
在面向对象编程中,基类(Base Class)与派生类(Derived Class)是构建复杂系统的重要工具。基类提供了一种复用代码的方式,它定义了一组通用的方法和属性,而派生类则是在基类的基础上进行扩展或修改,以满足特定...
垃圾分类数据集和源代码含四个大类和245个小类,垃圾分类是目前社会的一个热点,分类的任务是计算机视觉任务中的基础任务,相对来说比较简单,只要找到合适的数据集,垃圾分类的模型构建并不难,这里我找到一份关于...
我用C++封装的跨平台定时器类,CppTimer类。目前仅支持单定时器。特分享出来供大家使用。后续我会添加支持多定时器的功能,敬请期待。 用法: 1、解压,放入项目文件夹中; 2、添加入项目; 3、在需要使用定时器的...
接口中我使用了缓存,以及在返回数据时候用了响应实体包装了, 没有直接返回数据库映射实体类。 怀疑问题点: 响应实体包装实体类中的字段有误,全部写成了小写字母? 缓存在出入库的时候会自动转化大小写。 问题...
这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,
1、这是bos开发使用的工具类,大概一千多行代码,包括获取当前组织,用户,自定义编码规则等等等等实用的方法,这是一朋友给我的,我在做金蝶开发的时候,帮了我很多很多!感兴趣的可以下来看看,每个方法都有注释。...
标题中的“我自己日常使用的工具类”表明这是一些作者个人常用、并且可能对其他人也有帮助的编程工具类。这些工具类通常包含了各种实用的功能,旨在提高开发效率,简化常见的编程任务。它们可能涵盖字符串处理、日期...
动态数据显示类 平时写程序时经常需要示波器显示数据。...由于程序的需要,我花了两天写了一个类用于数据显示。现在我把类公开,大家相互学习,详细功能介绍和使用说明参见下载压缩包中的WORD文档。欢迎提出改进意见
调用接口怎么知道使用的是哪个实现类 Java通过接口调用方法的时候,怎么知道调用的是哪个实现类 当调用接口中的方法时,如何判定用的是哪个实现类 一个接口有多个实现类,怎么知道调用了哪个实现类
day11-类和对象 1. 类和对象 1.1 类和对象的理解【理解】 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类...
非存储过程操作类,如果要用到存储过程的话,自已修改里面的代码,里面的存储过程被我注释了。 至于调用方法,应该不用我说下载者应该也懂得吧,如果是对C#一巧不通的初学者,不懂也不要怪我,可以问我,或问懂点的...
资源介绍:。鱼刺类_多线程应用 - 更新日志。5.4.3(2017-12-01)。...*简单封装了内存文件映射(作为私人模块,我基本是用到了什么才会往里封装什么)。资源作者:。@bints。资源界面:。资源下载:。
在这个场景中,提到的"我的标签分页 类是GOOGLE的"可能指的是一个开发者参照了谷歌(Google)的标签分页实现方式,创建了一个类似的类或者组件。谷歌的标签分页通常以其简洁、高效的用户体验而著称,因此,这个类...
最重要的是,我理解了类和对象的概念,并学会了如何使用它们来解决实际问题。我也了解到了面向对象编程的思想,并掌握了基本的编程技巧。在未来的学习中,我将继续学习和实践,提高自己的编程能力。
非存储过程操作类,如果要用到存储过程的话,自已修改里面的代码,里面的存储过程被我注释了。 至于调用方法,应该不用我说下载者应该也懂得吧,如果是对C#一巧不通的初学者,不懂也不要怪我,可以问我,或问懂点的...
java工具类,代码我的文章里介绍了,可以直接用
需要识别可回收垃圾、厨余垃圾、有害垃圾和其他垃圾等四个大类,在网上找到了很多开源的数据集,但是质量参差不齐,而且有坏图的存在,所以我就将这些数据集还有自己爬取的数据一起清洗了一遍,,一共有245个小类和4...
修改二:一个小BUG,原操作类对空映射的一个处理上有点小问题,被我细看后发现,已修正。 修改三:添加了动态实体类的控件绑定支持。原操作类已支持动态绑定,无需给定一个具体的类型,而返回一个dynamic类型的实体...