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的相关资源包的 首先安 ...
随机推荐
- PriorityQueue ,ArrayList , 数组排序
static class E implements Comparable<E>{ int x ; int y ; int state ; int money ; public E(int ...
- 浅析 rand7生成rand10 方法 之 思想篇(一)
[问题描写叙述] rand7是一个能生成1-7的随机数.要求利用rand7生成1-10的随机数. [算法思想] 1.组合数学方法 第1次 1 2 3 4 5 6 7 之中用rand7取一个数 第2次从 ...
- lucene 自定义评分 (给lucene自带的评分*我们filed的系数) 如搜索结果时间的加权
参见孔浩 lucene 22讲 步骤 1.写一个类继承于 CostomScoreQuery -->覆盖getCostomSorceProvider 方法 2.写一个自己的provider(重写c ...
- Sales Team 仪表盘
实际设定值 仪表定义 <div class="oe_center" t-if="record.invoiced_ta ...
- Swift----编程语言语法
1 简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&a ...
- iOS_隐藏顶部状态栏
iOS6和iOS7在隐藏 Status Bar 三种方式比較: Storyboard 界面上选中UIViewController,最右边Simulated Metrics找到 Status Bar 设 ...
- 代码运行时间 检测锁及死锁详细信息,及sql语句 平台转化
代码运行时间 System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 ...
- 关于Win8 用不了USB转串口驱动
win8系统必需要关闭设备驱动自己主动更新,否则联网更新的驱动是用不了的.操作过程例如以下: 打开控制面板,搜索"设备".更改设备安装设置 watermark/2/text/aHR ...
- STL之set具体解释(二)
首先来看看set集合容器: set集合容器实现了红黑树的平衡二叉树数据结构.在插入元素时它会自己主动调整二叉树的排列,把该元素放到适当的位置,而且 保证左右子树平衡.平衡二叉检索树採用中序遍历算法. ...
- OpenCV4Android编译
http://blog.sina.com.cn/s/blog_602f87700102vdnw.html (2015-04-02 11:10:01) 转载▼ 最近的一个项目中,需要自己编译Op ...