Java笔记(十)
正则表达式:
符合一定规则的表达式,用于专门操作字符串。
对QQ号码进行校验,要求:5-11位,0不能开头,只能是数字。
public class Demo{
public static void main(String[] args) {
String qq = "741603187";
String regex = "[1-9][0-9]{4,10}";
boolean flag = qq.matches(regex);
if(flag){
System.out.println("OK");
}
else{
System.out.println("X");
}
}
}
操作功能:
(1)匹配:String matches()方法
[abc]:a,b或c
[^abc]:任何字符,除了a,b或c
[a-zA-Z]:a到z或A到Z,包含两头
. 任何字符
\d 数字[0-9]
\D 非数字[^0-9]
\w 单词字符[a-zA-Z_0-9]数字、字母、下划线
\W 非单词字符
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但是不超过m次
(2)切割:String split()方法
例:按照叠词完成切割:
为了可以让规则的结果被重用,可以将规则封装成一个组,用( )完成。组的出现都有编号,从1开始。想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。
public class Demo{
public static void main(String[] args) {
String s = "abcccdeffghhhhhi";
String regex = "(.)\\1+";
String[] arr = s.split(regex);
for(String str : arr){
System.out.println(str);
}
}
}
输出结果:
ab
de
g
i
(3)替换:String replaceAll()方法
public class Demo{
public static void main(String[] args) {
//将字符串中的数字替换成*
String s1 = "abcc12432ffg333hi42314";
String regex1 = "\\d{4,}";
myReplace(s1, regex1, "*");
//将字符串中重叠的字符替换成单个字母,如aaa->a
String s2 = "abcccdeefffffg";
String regex2 = "(.)\\1+";
myReplace(s2, regex2, "$1"); //$n,获取第n组中的内容
}
public static void myReplace(String str, String regex, String newStr){
str = str.replaceAll(regex, newStr);
System.out.println(str);
}
}
输出结果:
abcc*ffg333hi*
abcdefg
(4)获取:将字符串中符合规则的子串取出
步骤:将正则表达式封装成对象
让正则表达式和要操作的字符串相关联
关联后,获取正则匹配的引擎
通过引擎对符合规则的子串进行操作,比如取出
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo{
public static void main(String[] args) {
String str = "jin tian xing qi ji";
String regex = "\\b[a-z]{4}\\b"; // \b单词边界 //将规则封装成对象
Pattern p = Pattern.compile(regex); //让正则对象和要作用的字符串相关联。获取匹配器对象
Matcher m = p.matcher(str); //讲规则作用在字符串上,并进行符合规则的子串查找
while(m.find()){
System.out.println(m.group());
}
}
}
输出结果:
tian
例:
将下列字符串转成:大家早上好
将已有字符串变成另一个字符串,使用替换功能,可以先将 . 去掉,再将多个重复的内容变成单个内容
public class Demo{
public static void main(String[] args) {
test();
}
public static void test(){
String s = "大大大...家家家家家家家..早早早...上上上上上上上..好好";
s = s.replaceAll("\\.+", "");
s = s.replaceAll("(.)\\1+", "$1");
System.out.println(s);
}
}
将ip地址进行地址段顺序排序:
按照字符串自然顺序,只要让它们每一段都是3位即可。
(1) 按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位
(2) 将每一段只保留3位。这样。所有的ip地址都是每一段3位
import java.util.TreeSet;
//import java.util.Arrays;
public class Demo{
public static void main(String[] args) {
test();
}
public static void test(){
String ip = "192.68.1.254 102.49.23.13 10.10.10.10 2.2.2.2 8.109.90.30";
//取一连串连续数字,并在数字前加00
ip = ip.replaceAll("(\\d+)", "00$1");
//将以0开头(没有或多个)的,并3个数字结尾的一连串数字,替换成后三个数字。如002->002, 0010->010, 00192->192
ip = ip.replaceAll("0*(\\d{3})", "$1");
String[] arr = ip.split(" ");
//Arrays.sort(arr);
TreeSet<String> ts = new TreeSet<String>();
for(String s : arr){
ts.add(s);
}
for(String s : ts){
System.out.println(s.replaceAll("0*(\\d+)", "$1"));
}
}
}
输出结果:
2.2.2.2
8.109.90.30
10.10.10.10
102.49.23.13
192.68.1.254
对邮件地址进行校验:
public class Demo{
public static void main(String[] args) {
test();
}
public static void test(){
String mail = "abc12@sina.com.cn";
String regex = "\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
System.out.println(mail.matches(regex));
}
}
Java笔记(十)的更多相关文章
- Java笔记(十九)……多线程
概述 进程: 是一个正在执行中的程序 每一个进程执行都有一个执行顺序,该执行顺序是一个执行路径,或者叫一个控制单元 线程: 就是进程中的一个独立的控制单元,线程在控制着进程的执行 一个进程中至少有一个 ...
- Java笔记(十八)……包
概述 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是 包名.类名. 包也是一种封装形式. 访问权限 引用<The Complete Reference&g ...
- Java笔记(十五)……面向对象IV多态(polymorphism)
概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...
- Java笔记(十四)……抽象类与接口
抽象类概念 抽象定义: 抽象就是从多个事物中将共性的,本质的内容抽取出来. 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念. 抽象类: Java中可以定义没有方法体的方法,该方法的具体实现由子类完成 ...
- Java笔记(十二)……类中各部分加载顺序及存放位置问题
什么时候会加载类 使用到类中的内容时加载,三种情况: 创建对象:new StaticDemo(); 使用类中的静态成员:StaticCode.num = 9; StaticCode.getNum() ...
- java笔记十:java中的反射
Java中,反射是一种强大的工具.它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接.反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而 ...
- Java笔记(十六)……内部类
内部类概述 内部类是将一个类定义在另一个类里面,对里面那个类就成为内部类(内部类,嵌套类). 当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容 访问特点 内部类 ...
- Java笔记(十)……面向对象II封装(Encapsulation)
封装概念 封装: 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: 将变化隔离. 便于使用. 提高重用性. 提高安全性. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性都隐藏,提 ...
- java jvm学习笔记十(策略和保护域)
欢迎转载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8271415 前面一节,我们做了一个简单的实验,来说明什么是策略文件,在文章的最后,也 ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
随机推荐
- 使用sqlalchemy查询并删除数据表的唯一性索引
简单描述表结构,字段类型 desc tabl_name 删除索引:alter table `db`.`table_name` drop index `index_name` 注意里面的特殊符号: ` ...
- Direct2D教程(一)Direct2D已经来了,谁是GDI的终结者?
什么是Direct2D 一言以蔽之,就是Windows 7平台上的一个2D图形API,可以提供高性能,高质量的2D渲染.大多数人对Direct2D可能都比较陌生,以至于我之前在论坛上提到这个词的时候, ...
- 手把手教你安装Hbase,一次成功!
安装环境: OS: Centos 6.5 JDK: jdk1.6.0_18 Hadoop: hadoop-0.20.2 Hbase: hbase-0.90.5 安装准备: 1. Jdk环境 ...
- C 标准库 - <signal.h>
C 标准库 - <signal.h> 简介 signal.h 头文件定义了一个变量类型 sig_atomic_t.两个函数调用和一些宏来处理程序执行期间报告的不同信号. 库变量 下面是头文 ...
- VUE高仿饿了么app开发思维导图
来自互联网 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing
- pycharm5.0 激活方式
Pycharm5注册方式 0x1 ,安装 0x2 , 调整时间到2038年. 0x3 ,申请30天试用 0x4, 退出pycharm 0x5, 时间调整回来. ##注册方法2### 注册方法: ...
- Phalcon框架如何实现读写分离
Phalcon框架如何实现读写分离 假设你已经在DI容器里注册了俩 db services,如下: <?php // 主库 $di->setShared('dbWrite', functi ...
- Android 设计模式之单例模式
设计模式是前人在开发过程中总结的一些经验,我们在开发过程中依据实际的情况,套用合适的设计模式,能够使程序结构更加简单.利于程序的扩展和维护.但也不是没有使用设计模式的程序就不好.如简单的程序就不用了, ...
- C# 之 集合ArrayList
.NET Framework提供了用于数据存储和检索的专用类,这些类统称集合. 这些类提供对堆栈.队列.列表和哈希表的支持.大多数集合类实现系统的接口.以下我们主要来讲一下ArrayList. ...
- SDP, RTP, RTCP, RTSP, RTMP 名词解释
读维基百科里的词条,记录的一点笔记. SDP 会话描述协议 Session Description Protocol 严格来说 SDP 不是一种协议,而是一种格式约定,用于描述流媒体的参数.如协商媒体 ...