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的相关资源包的 首先安 ...
随机推荐
- IDEA Java/Scala混合项目maven打包
1.首先创建maven项目 2.创建成功后新建class,只有java的,没有scala的 3.修改pom.xml文件,引入scala <?xml version="1.0" ...
- SilverLight: 数据绑定(1)-绑定到数据对象
ylbtech-SilverLight-DataBinding: Binding to Data Objects(绑定到数据对象) 1.A, Building a Data Object(创建一个数 ...
- libsvm交叉验证与网格搜索(参数选择)
首先说交叉验证.交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题.交叉验证一般要尽量满足:1 ...
- FreeBSD 8
FreeBSD 8.0的安装过程和7.2区别不大.先在FreeBSD官方网站上下载安装镜像,我一般都下载DVD的ISO,也有人爱好下最小的安装包,然后通过FTP或HTTP方式从网上下载各个程序包. 这 ...
- php程序调试: xdebug的配置
怎样在phpeclipse中像调试Java程序一样调试php呢? XDebug的版本号非常多,打开http://xdebug.org/index.php.把站点细致看一下,你会发现有句"If ...
- Kick the ball!(dfs)湖南省赛第十届
Problem K: Kick the ball! Time Limit: 1 Sec Memory Limit: 128 MB Special Judge Submit: 109 Solved ...
- 可在 html5 游戏中使用的 js 工具库
可在 html5 游戏中使用的 js 工具库 作者: 木頭 时间: September 21, 2014 分类: Utilities,Game 使用 cocos2d-js 3.0 开发游戏项目两三个月 ...
- 拒绝ssh远程暴力破解
拒绝ssh远程暴力破解 简介 在网络技术日益发展的今天,网络上的安全问题日益严重.当你在公网上使用Linux服务器时,很有可能你的服务器正在遭受ssh暴力破解. 曾经有一次我的同伴将给客户提供监控服务 ...
- Vue.directive 自定义指令
一.什么是全局API? 全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局API,比如我们今天要学习的指令Vue.directive.说的简单些就是,在 ...
- linux 块设备驱动(二)——块设备数据结构
本文来源于: 1. http://www.cnblogs.com/dyllove98/archive/2013/07/01/3165567.html 块设备相关的数据结构以及接口: 块设备接口则相对复 ...