一、Java中的正则表达式
1.正则表达式就是记录文本规则的代码。用于进行文本匹配的工具,也是一个匹配的表达式。
先上一个小例子:
根据给定正则表达式的匹配拆分此字符串,得到拆分好的字符串数组。
public class RegexTest{
public static void main(String[] args){
String str = "dong,shuai,may,the,force,be,with,you";
String[] str2 = str.split(",");//按照“,”对str拆分,得到str2数组
for(int i = 0; i < str2.length; i++){
System.out.println(str2[i]);
}
}
}
注意:
如果用“.”或”|”做分隔符,必须写成str.split(“\.”),因为“.”和”|”都是转义字符,必须加“\”。
2.下面是正则表达式的一些元字符:
\b 代表单词的开头或结尾,也就是单词的分界处。
\d匹配数字,a\d{3}表示连续重复匹配3次a。
\s 匹配任意的空白符。
^匹配字符串的开始。
$ 匹配字符串的结束。
3.如果要重复匹配,则有下面几种方式
* 重复0次或多次。
+ 重复一次或多次。
? 重复0次或一次。
{n} 重复n次。
{n,} 重复n次或更多次
{n,m}重复n次到m次
4.匹配几个字符放在中括号里
[a,e,i,o,u]表示匹配英文任何一个元音字符。
[.?!]表示匹配标点符号, . 或?或!
[0-9]相当于\d
5.在java中有专门进行正则表达式的类,在java.util.regex包里面。
java.util.regex.Pattern类
java.util.regex.Matcher类
下面是一个匹配电话号码的例子:
/**
* 正则表达式
*/
import java.util.regex.*;
public class RegexTest{
public static void main(String[] args){
String str = "010-644659153";
Pattern p = Pattern.compile("0\\d{2}-\\d{8}");//编译正则表达式字符串到pattern对象用以匹配的快速处理
Matcher m = p.matcher(str);
boolean flag = m.matches();//返回输入是否与模式匹配
System.out.println("Your input is:" + flag);
}
}
注意:由于java里“\”需要转义,应该变成“\”。
6.常见正则表达式:
(1)检查是否email地址
^([\\w-\\.]+)@((\\[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$
(2).判断输入的字符串只包含汉字
^[\u4e00-\u9fa5]+$
(3).匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字符或空格间隔,也可以没有间隔
^\\(0\\d{2}\\)[- ]?\\d{8}$|^0\\d{2}[- ]?\\d{8}$|^\\(0\\d{3}\\)[- ]?\\d{7}$|^0\\d{3}[- ]?\\d{7}$
(4).判断输入的字符串是否是一个合法的手机号,以1开头。
^1\\d{10}$
(5)判断输入的字符串只包含数字,可以匹配整数和浮点数
^-?\\d+$|^(-?\\d+)(\\.\\d)?$
(6)匹配非负整数
^\\d+$
(7)判断输入的字符串只包含英文字母
^[A-Za-z]+$
(8)判断输入的字符串只包含数字和英文字母
^[A-Za-z0-9]+$
7.String类中正则表达式的用法
例子:
public class UseRegex{
public static void main(String[] args){
String str = "dongshuai";
String regStr = "ong";
str = str.replaceAll(regStr,"ONG");//用"ONG"替换所有str字符串中的regStr
System.out.println("str = " + str);
String str1 = "dong,shuai,dongshuai,gnod,iauhs,iauhsgnod";
str1 = str1.replaceFirst(regStr,"ONG");//用"ONG"替换str字符串中的第一个regStr
System.out.println(str1);
String[] str2 = str1.split(",");//用“,”拆分此字符串
for(int i = 0; i < str2.length; i++){
System.out.println("str2[" + i + "] ==" + str2[i]);
}
String[] str3 = str1.split(",",3);//用“,”拆分此字符串,拆分后数组的length为3
for(int i = 0; i < str3.length; i++){
System.out.println("str3[" + i + "] == " + str3[i]);
}
}
}
二、Math类
Java中的数学(Math)类是final类,不可继承
示例如下:
/**
* Java中的数学(Math)类是final类,不可继承
* 包括一组静态方法和两个常数。
*/
//import java.util.Math;
public class MathTest{
public static void main(String[] args){
System.out.println(Math.PI);
System.out.println(Math.E);
double d = 100.001;
double d1 = 10.001;
double i = Math.ceil(d);//不小于d的最小整数
double i1 = Math.floor(d);//b不大于d的最大整数
double i2 = Math.round(d);//四舍五入
double i3 = Math.abs(d);//绝对值
double i4 = Math.min(d,d1);//两数中的小的数
double i5 = Math.max(d,d1);//两数中的大的数
double i6 = Math.log(d);//自然对数
double i7 = Math.exp(d);//e的指数
double i8 = Math.sqrt(d);//开平方
double i9 = Math.random() * d;//随机数
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println(i5);
System.out.println(i6);
System.out.println(i7);
System.out.println(i8);
System.out.println(i9);
}
}
三、StringBuffer和StringBuilder类
String类一旦创建对象,其内容不能修改
StringBuffer和StringBuilder创建的对象的内容可以修改。
StringBuffer适合多进程,安全。
StringBuilder适合单进程,运行快。
示例如下:
/**
* String生成的对象一旦创建,内容不能再被修改
* StringBuffer和StringBuilder类,对象的内容是可以被修改的
*/
public class StringBufferTest{
public static void main(String[] args){
StringBuffer buffer = new StringBuffer();
buffer.append("d");//添加数值到StringBuffer对象中
buffer.append("d");
buffer.append("d");
buffer.append("d");
buffer.append("d");
buffer.append("d");
System.out.println(buffer.toString());
StringBuilder builder = new StringBuilder();
builder.append("s");
builder.append("s");
builder.append("s");
builder.append("s");
builder.append("s");
builder.append("s");
builder.append("s");
System.out.println(builder.toString());
}
}