每一段路都有不一样的领悟,理想和实现总有差距,所以青春的路需要奋斗!
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。而在java中,字符串的操作还主要集中于String,StringBuffer和StringTokenizer(作用分割字符串)。与正则表达式相比,他们只能提供简单的功能。
正则表达式是一种强大而又灵活的文本处理工具。使用正则表达式,我们能以编程的方式构造复杂的文本模式,并对输入的字符串进行搜索,一旦找到了匹配这些模式的部分,你就能随心所欲的对文本进行处理。正则表达试提供了一种完全通用的方式,能够解决各种字符串的处理相关的问题:匹配,选择,编辑以及验证。
正则表达式一般就是以某种方式来描述字符串“如果某个字符串包含有这些东西,那么他就是我要找的东西”
例如:要找一个数字,他可能有负号在他最前面,那你就写一个负号,加上一个问号,就想这样:
-?
要描述一个整数,他可能有一位或多位阿拉伯数字:
\d
如果在其他语言中用过正则表达式,你就能法相在Java对反斜杠"\"的不同处理。在其他语言中,\\表示“我想在正则表达式中插入一个普通的(字面上)的反斜杠”,请不要赋予任何意义。而在Java中\\的意思是我要插入一个正则表达式的反斜杠,所以这个反斜杠具有特殊的意义,就像前面提到的:要描述一个整数,他可能有一位或多位阿拉伯数字,如果要在Java中正确的表达应该使用\\d。如果你只想插入一个普通的反斜杠你应该这样表示:\\\\。
要表示一个或多个之前的表达式应该使用:+
下面看几个应用正则表达式的最简单的几个例子:
package com.wukung.code; public class Test3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //利用正则表达式最简单的途径,就是使用String类的内建功能 System.out.println("-1234".matches("-?\\d+"));//表示可能是一个负号或什么也没有开头 System.out.println("1234".matches("-?\\d+")); System.out.println("+911".matches("-?\\d+")); // 这个符号|表示或的意思,但由于+号在正则表达式中有特殊的含义,所以要加转义符号 System.out.println("+911".matches("(-|\\+)?\\d+")); } }
输出结果:
String类还有一个非常有用的正则表达式工具——spilt()方法,其功能是“将字符串从正则表达式匹配的地方切开”看个例子:
package com.wukung.code; import java.util.Arrays; public class Test4 { public static String knight = "Then,when you when found the shrubbery,you must"+ "cut down the mightiest tree in the forest..."+ "with...a herring!"; public static void split(String regex){ System.out.println(Arrays.toString(knight.split(regex))); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub split(" ");//在用空格的地方切开,按空格来划分字符 split("\\W+");//非单词字符,从运行结果可以看出逗号被删除了 split("n\\W+");//字母n后面跟着一个或多个字符 } }
输出结果:
String类自带的最后一个正则表达式工具是“替换”。你可以只替换正则表达式第一个匹配的子串,或是替换所有匹配的地方:看一个例子
package com.wukung.code; public class Test6 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s = "3280932332"; System.out.println(s.replaceAll("[^0-9]","")); } }
输出结果:
面试例题1:String s = "32fdsfd8fds0fdsf9323k32k",从中找出3280932332,你会怎么做。
package com.wukung.code;
public class Test6 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "3280932332";
System.out.println(s.replaceAll("[^0-9]",""));
}
}
面试例题2:String str = "2014-04-05 21:23:00",要把这个字符串变成“20140405212300”,该怎样做。
package com.wukung.code;
public class Test07 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "2014-04-05 21:23:00";
String[] s=str.split("\\D");
for(String st:s){
System.out.print(st);
}
}
}
先写到这,未完待续。。。