今天在做字符串处理的时候,
发现了在J2SE中使用正则表达式来匹配英文句号的一个小陷阱。
特此记录下来。
public static void main(String[] args) {
String test = "aa\\abb.gg\\ad.txt";
String regEx = ".+\\\\(.+)\\..+$";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(test);
boolean rs = m.find(); // 用来验证时候有匹配项
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
}
关键的部分在这一句:
String regEx = ".+\\\\(.+)\\..+$";
在正则表达式中,我们都知道要匹配特殊字符需要用转义符 “ \ ” 来转移该特殊字符,
所以我相当然的以为跟其他语言一样,
" \. " 可以匹配英文的句号 " . "
但是在J2SE中,却得到编译器报错的错误。
查阅相关资料,java中的dot符号(.)需要用“ \\. ”来转义。
因为Java编译器会把 "\." 当做是对它的字符串对象的转义。
原文如下:
It's actually very simple. You need to end up with the escape sequence \. for the regexp to the valid, but it doesn't work because the Java compiler sees it as an escape for its String objects, while a full-stop here does not require escaping.
The work-around is to write "\\.". This way, the backslash is escaped on the first round (remember that a backslash must be escaped anyway), and on the second round (when involving regex), it is the full-stop which is escaped...
========================全文完======================
分享到:
相关推荐
3. Java中使用Pattern和Matcher类进行正则匹配。 十五、反射机制: 1. 反射允许程序在运行时动态获取类的信息并操作类的对象。 2. Class类:代表运行时的类信息,如获取类名、构造器、方法等。 3. Method类:表示类...
- **正则表达式**:Java 正则表达式的语法与 JavaScript 相似但也有区别,某些方法如 `replaceAll` 和 `split` 在转换后的 JavaScript 中可能表现不同。 - **序列化**:由于动态类装载和反射在编译后的 JavaScript ...
- 第一个使用Java社区流程的版本。 - JSR-059 (Java Specification Request) —— Java的伞形规范请求。 2. **新编程特性**: - 日志记录APIs。 - 断言机制。 - XML处理 (JAXP)。 - 新的I/O APIs。 - 正则...
8. **API使用**:学习并应用Java标准库中的各种类和方法,如日期时间处理、数学运算、正则表达式等。 9. **设计模式**:了解和应用常见的设计模式,如工厂模式、单例模式、观察者模式等。 通过上述知识点的学习和...
正则表达式用于文本匹配和操作。 2. **数据库**: 掌握SQL语言,包括对Oracle或MySQL的操作,如单表查询、多表连接(内连接、外连接)、子查询。管理数据库对象如表、视图、索引、序列和约束。树状结构存储数据,...
正则表达式用于字符串匹配和处理,反射机制允许程序在运行时动态访问类的信息。 2. **数据库(如Oracle或MySQL)**:掌握SQL语言,包括DML(数据操作语言)和DDL(数据定义语言),如插入、更新、删除、创建表等。...
2000年,Java 2 Standard Edition (J2SE) 1.4发布,引入了显著的性能提升和新特性,如异常链、断言和正则表达式。更重要的是,这个版本引入了Java HotSpot技术,可以根据运行时性能动态优化代码,极大地提升了JVM的...
- 正则表达式、反射机制等也是高级Java开发者必备的技术。 - **数据库**:无论是Oracle还是MySQL,熟悉SQL语句、表的管理、数据库设计原则都是非常重要的。 - **JDBC**:掌握数据库操作的基本技能,包括连接池、...
- **字符串:** 学习`String`类的基本用法,理解字符串的不可变性,并学会使用正则表达式处理字符串。 #### 四、面向对象编程 **封装:** - **类与对象:** 学习如何定义类以及创建对象。 - **成员变量与方法:**...
JShell是一个交互式的Java shell工具,允许开发者在命令行中即时编写和测试代码片段,这对于快速原型设计和学习非常有用。 通过回顾Java的发展历程以及详细介绍Java 9的新特性,我们可以看出Java语言一直在不断...
2. **继承**:继承允许一个类(子类)继承另一个类(父类)的特性和行为。这有助于代码复用和减少冗余代码。继承还提供了层次化的分类结构,使得代码更加灵活和易于扩展。 3. **多态**:多态是指允许不同类的对象对...