提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
1、public String replaceAll(String regex,String replacement)和public boolean matches(String regex)
2、public String [] spilt(String regex)
3、StringTokenizer(String str,String delim)、public boolean MoreTokens()、public String nextToken()
前言
进行本节学习之前需要先将下方内容熟练掌握
元字符
元字符 | 在正则表达式中的写法 | 意义 |
. | “.” | 代表任何一个字符 |
\d | “\\d” | 代表0~9的任何一个数字 |
\D | “\\D” | 代表任何一个非数字字符 |
\s | “\\s” | 代表空类字符"\t","\n","\x0B","\f","\r" |
\S | “\\S” | 代表非空格类字符 |
\w | “\\w” | 代表可用于标识符的字符(不包括“$”) |
\W | “\\W” | 代表标识符类字符 |
括号元字符
[abc] :代表a、b、c中的任何一个。
[^abc] :代表除了a、b、c的字符
[a-zA-Z]:代表英文字符(包含大小写)的任意一个
[a-b]:代表a~b的任何一个
[a-d[m-p]]:代表a-d和m-p的并集的字符
[a-z&&[d-f]]:代表a-z和d-f的交集
[a-d&&[^bc]]:代表a-d和bc的差集
注:由于“.”代表任意一个字符,所以在正则表达式中如果想表示普通意义的“.”字符的话就需要用[.]或\\.
限定符
带限定符的模式 | 意义 |
X? | X出现0次或者1次 |
X* | X出现0次或者多次 |
X+ | X出现1次或者多次 |
X{n} | X恰好出现n次 |
X{n,} | X至少出现n次 |
X{n,m} | X出现n,m次 |
XY | X的后面紧跟Y |
X|Y | X或者Y |
一、正则表达式的用途
正则表达式可以应用于提取一段信息中的有效数据,检验输入的内容是否合法,关键词检索之类
二、正则表达式的使用函数
1、public String replaceAll(String regex,String replacement)和public boolean matches(String regex)
public String replaceAll(String regex,String replacement)
使用范例:str.replaceAll(regex," ")
replaceAll函数的作用是将str中的包含regex的片段替换成为replacement
public boolean matches(String regex)
使用范例:str1.matches(regex)
matches函数的作用是判str1中是否含有regex的片段,如果有那就返回true,反之则返回flase
public class example1 {
public static void main(String args[]){
String regex="-?[0-9][0-9]*[.]?[0-9]*";
String str1="-0.618";
String str2="999大家好,-123.45608明天放假了";
if(str1.matches(regex)){
System.out.println(str1+"可以表示数字");
}
else{
System.out.println(str1+"不可以表示数字");
}
String result=str2.replaceAll(regex,"");
System.out.println("剔除\""+str2+"\"中的数字,\n得到的字符序列是:");
System.out.println(result);
}
}
运行结果如下
2、public String [] spilt(String regex)
public String [] spilt(String regex)
使用范例: String word[]=str.split(regex);
split()的作用是以regex作为剪刀,将str剪成一个个的片段,并将片段存放入数组中,因此str函数
import java.util.Scanner;
public class reporte {
public static void main(String[] args) {
System.out.println("请输入文本");
Scanner reader= new Scanner(System.in);
String str=reader.nextLine();
String regex="[\\s\\d\\p{Punct}]+";
String word[]=str.split(regex);
for (int i=0;i<word.length;i++)
{
int m=i+1;
System.out.println("单词"+m+":"+word[i]);
}
}
}
3、StringTokenizer(String str,String delim)、public boolean MoreTokens()、public String nextToken()
StringTokenizer(String str,String delim)这个函数就类似于构造一个类
使用范例: StringTokenizer str=new StringTokenizer(s,"#")
定义一个StringTokenizer对象str,并将字符串 s 以 # 分隔,逐个存入str中
public boolean hasMoreTokens()
使用范例: str.hasMoreTokens()
检测StringTokenizer创造的字符序列中是否还有剩余数据
public String nextToken()
使用范例:str.nextToken()
逐个返回str中被分隔开的信息,并且str每次被返回一个信息就会将该信息在StringTokenizer中删除
import java.util.StringTokenizer;
public class reporte {
public static void main(String[] args) {
String s="市话费:28.89,长途话费:128.87,上网费:298元";
String regex="[^0-9.]+";
s=s.replaceAll(regex,"#");//将 s 中的非数字信息替换为 #
StringTokenizer fenxi=new StringTokenizer(s,"#");//将 s 中的 # 信息全部剔除,
// 并且将分解而得的 s 片段存入一个字符串数组中
double toltalMoney=0;
while (fenxi.hasMoreTokens())//hasMoreTokens()是一个boolean方法
// 检测StringTokenizer创造的字符串数组中是否还有剩余数据
{
double money=Double.parseDouble(fenxi.nextToken());//next.Token()方法的意思是逐个将字符串数组中的信息输出
/*Double.parseDouble()方法是一种特殊的强制类型转换方法,其中括号中的参数必须是String类型,否则转换会报错*/
// 相同的Integer.parseInt()方法与Double.parseDouble()方法用法相似
System.out.println(money);
toltalMoney+=money;
}
System.out.println("总金额为:"+toltalMoney+"元");