u0027代表JAVA_java中最容易犯错的特殊字符
问题背景
能准确说出下面的java 执行完毕后会打印出什么?
System.out.println(
String.class.getName()+ ".class");
System.out.println(
String.class.getName().
replaceAll(".","/") + ".class");
相信对于第一行,大部分人不会犯错,打印
java.lang.String.class
我们想使用/去分割类的包,期待打印的结果为
java/lang/String/class
真实返回的结果是这个样子的:
.class
为什么会这样呢
原因
问题在于String.replaceAll 接受了一个正则表达式作为它的第一个参数,而并
非接受了一个字符序列字面常量。(正则表达式已经被添加到了Java 平台的1.4
版本中。)正则表达式“.”可以匹配任何单个的字符,因此,类名中的每一个
字符都被替换成了一个斜杠,进而产生了我们看到的输出。
解决方式
方式一:使用转义字符
System.out.println(
String.class.getName().
replaceAll("\\.","/") + ".class");
打印结果
java/lang/String.class
是不是有点不懂,为什么会有两个?
第一个"\"代表的是引用(正则表达式中的Quotation),第二个代码"\"转义
Quotation
\Nothing, but quotes the following character
\QNothing, but quotes all characters until \E
\ENothing, but ends quoting started by \Q
方式二 使用Quotation
System.out.println(
String.class.getName().
replaceAll("\\Q.\\E","/") + ".class");
结果也是
java/lang/String.class
也可以使用
System.out.println(
String.class.getName().
replaceAll(Pattern.quote("."),"/") + ".class");
其内部实现也是使用Quotation
/*** Returns a literal pattern String
for the specified
* String
.
*
*
This method produces a String
that can be used to
* create a Pattern
that would match the string
* s
as if it were a literal pattern.
Metacharacters
* or escape sequences in the input sequence will be given no special
* meaning.
*
*@params The string to be literalized
*@returnA literal string replacement
*@since1.5*/
public staticString quote(String s) {int slashEIndex = s.indexOf("\\E");if (slashEIndex == -1)return "\\Q" + s + "\\E";
StringBuilder sb= new StringBuilder(s.length() * 2);
sb.append("\\Q");
slashEIndex= 0;int current = 0;while ((slashEIndex = s.indexOf("\\E", current)) != -1) {
sb.append(s.substring(current, slashEIndex));
current= slashEIndex + 2;
sb.append("\\E\\\\E\\Q");
}
sb.append(s.substring(current, s.length()));
sb.append("\\E");returnsb.toString();
}
常见的特殊字符有:
EscapeSequence:
\ b (backspace BS, Unicode \\u0008)
\ t (horizontal tab HT, Unicode \\u0009)
\ n (linefeed LF, Unicode \\u000a)
\ f (form feed FF, Unicode \\u000c)
\ r (carriage return CR, Unicode \\u000d)
\ " (double quote ", Unicode \\u0022)
\ ' (single quote ', Unicode \\u0027)
\ \ (backslash \, Unicode \\u005c)
OctalEscape (octal value, Unicode \\u0000 to \\u00ff)
还有
Twelve tokens, formed from ASCII characters, are the separators (punctuators).
( ) { } [ ] ; , . ... @ ::
也可以使用下面的方法进行判断
importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classCheckSpecialCharacterString {/*** Check whether the each character of String is special character or not using java
*@authorwww.instanceofjava.com*/
public static voidmain(String[] args) {
String Str="Java String interview questions*$%";
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}";for (int i = 0; i < Str.length(); i++) {if(specialCharacters.contains(Character.toString(Str.charAt(i))))
{
System.out.println(Str.charAt(i)+": is a special character");
}
}
}
}
更详细的资料可以参考官方文档【3】
参考资料:
【1】java解惑
【2】https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
【3】https://docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-3.10.6
【4】http://www.instanceofjava.com/2017/05/how-to-check-if-character-is-special.html
u0027代表JAVA_java中最容易犯错的特殊字符相关推荐
- java中最容易犯错的特殊字符
问题背景 能准确说出下面的java 执行完毕后会打印出什么? System.out.println(String.class.getName()+ ".class");System ...
- 管理就是通过别人完成任务,别怕员工犯错
互联网时代,每一位知识工作者,都是管理者.领导力已不再是某些人的专属能力,而成为每一个人生存.发展所需的硬技能.领导力不是天生的基因带来的能力,而是一系列可操作.可模仿.可践行的工具:沟通视窗.目标管 ...
- 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章膨胀的真理
本节书摘来自异步社区<统计会犯错--如何避免数据分析中的统计陷阱>一书中的第2章膨胀的真理,作者[美]Alex Reinhart(亚历克斯·莱因哈特),更多章节内容可以访问云栖社区&quo ...
- 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章置信区间的优势
本节书摘来自异步社区<统计会犯错--如何避免数据分析中的统计陷阱>一书中的第2章置信区间的优势,作者[美]Alex Reinhart(亚历克斯·莱因哈特),更多章节内容可以访问云栖社区&q ...
- 沉默不是代表我的错 ---犯错
下载地址: http://vbcoder.qupan.com/4354065.html http://www.qupan.com/down/vbcoder_4354065.html 沉默不是代表我的错 ...
- 软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...
健壮性与正确性 健壮性与正确性是不同的--一个倾向于使程序尽可能保持运行,即使遇到错误,一个倾向于使程序尽可能正确,不在意保持运行 异常 异常分为两种--checked exception与unche ...
- 脑洞大开!拿Transformer和CNN比较!犯错都像人类
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:量子位 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 这是 ...
- 大数据分析常见的犯错问题
我们会发生各种极有可能出现的混淆,数据抽取之后"迷恋"于数字,脑子里没有分析的目标,自己的局限影响指标选择......当分析数据的时候我们都很容易犯错.而今天我们就一起来了解一下, ...
- 《黑匣子思维:我们如何更理性地犯错》iphone部分
笔记摘自 黑匣子思维:我们如何更理性地犯错 [英] 马修·萨伊德 2017年10月10日 第 1 章 一台常规手术 当我们再退后一步,全面考虑错误发生的原因时,会发现极具讽刺性的事实.研究表明,我们常 ...
最新文章
- 我看.Net My Services
- sklearn LDA降维算法
- 网工路由基础(4)EIGRP协议
- (3.2)将分词和去停用词后的评论文本基于“环境、卫生、价格、服务”分类...
- flink启动出现java.lang.NoClassDefFoundError: org/apache/hadoop/fs/Path
- 深入浅出Nintex——更新PeopleandGroup类型的Field
- typecho插件库 TeStore 方便监控插件版本
- 2.4 表单数据的验证
- 通过TextWatcher去观察输入框中输入的内容以及输入字符个数
- iOS开发过程中常见错误问题及解决方案
- 用jsp代码完成购物车并且实现添加功能
- 计算机自动关机原理,电脑自动关机是什么原因怎样处理
- ketchup 消息队列rabbitmq使用
- 简单计算机java程序_JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单...
- 手写基于redis实现分布式限流器-pdlr
- 人类为什么不再登月了?
- echarts柱状图实现正负值不同颜色在上方显示数值
- datagrip 导出数据库表结构
- 爬虫快速入门——Request对象的使用
- Code Clinic: Go 代码诊所:Go语言 Lynda课程中文字幕
热门文章
- 微信小程序开发中,onLoad() 和onShow()的区别
- python画棒棒糖程序_论文画图神器!25个常用Matplotlib图的Python代码,收藏收藏!...
- 文本文件转换成Excel
- 设计模式(20):创建型-抽象工厂模式(Abstract Factory)
- 计算机毕业设计Node.js+Vue医疗器械公司公告管理系统(程序+源码+LW+部署)
- 国网×弘玑 | RPA培训课程提升员工数字素养
- 3.无霍尔传感器的BLDC换向原理
- Smart Home,让黑客攻击更加Smart
- Hello MySQL(九)——视图
- Linux串口驱动阅读笔记