一、使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符是否满足某一格式。正则表达式是含有一些具体特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
元字符 | 正则表达式中的写法 | 意义 |
. | . | 代表任意一个字符 |
\d | \\d | 代表 0 ~ 9 的任何一个数字 |
\D | \\D | 代表任何一个非数字字符 |
\s | \\s | 代表空白字符,如 ' \t ' ,' \n ' |
\S | \\S | 代表非空白字符 |
\w | \\w | 代表可用做标识符的字符,但不包括 “ $ ” |
\W | \\W | 代表不可用于标识符的字符 |
\p{Lower} | \\p{Lower} | 代表小写字母 a ~ z |
\p{Upper} | \\p{Upper} | 代表大写字母 A ~ Z |
\p{ASCII} | \\p{ASCII} | ASCII 字符 |
\p{Alpha} | \\p{Alpha} | 字母字符 |
\p{Digit} | \\p{Digit} | 十进制数字,即 0 ~ 9 |
\p{Alnum} | \\p{Alnum} | 数字或字母字符 |
\p{Punct} | \\p{Punct} | 标点符号 :! " $ % & ' () * + , - / : ; < = > ? @ [\] ^ _ ' {|} ~ |
\p{Graph} | \\p{Graph} | 可见字符 :[\p{Alnum} \p{Punct}] |
\p{Print} | \\p{Print} | 可打印字符 :[\p{Graph \x20] |
\p{Blank} | \\p{Blank} | 空格或制表符 :[\t] |
\p{Cntrl} | \\p{Cntrl} | 控制字符 :[/x00-\x1F\x7F] |
在正则表达式中可以使用方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。如 :
reg = " [abc]4 " 字符串 a4 b4 c4 都是和正则表达式匹配的字符串
[^456] :代表 4 5 6 之外的任何字符
[a-r] :代表 a - r 中的任何一个字母
[a-z A-z] :可表示任意一个英文字母
[a-e[g-z]] :代表 a-e 或 g-z 中的任意一个字母(并运算)
[a-o&&[def]] :代表字母 d e f (交运算)
[a-d&&[^bc]] :代表字母 a d (差运算)
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。
限定修饰符 | 意义 | 示例 |
? | 0 次或 1 次 | A? |
* | 0 次或多次 | A* |
+ | 一次或多次 | A+ |
{n} | 正好出现 n 次 | A{2} |
{n,} | 至少出现 n 次 | A{3,} |
{n,m} | 出现 n~m 次 | A{2,6} |
public class Judge{
public static void main(String [] args){
//定义要匹配 E_mail 地址的正则表达式
String regex = " \\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3} ";
//定义要进行验证的字符串
String str1= " aaa@ ";
String str2 = " aaaaa ";
String str3 = "1111@111ffyu.dfg.com ";
//判断字符串变量是否与正则表达式匹配
if(str1.matches(regex)){
System.out.println(str1 + "是一个合法的E_mail地址格式");
}
if(str2.matches(regex)){
System.out.println(str2 + "是一个合法的E_mail地址格式");
}
if(str3.matches(regex)){
System.out.println(str3 + "是一个合法的E_mail地址格式");
}
}
}
运行结果为:1111@111ffyu.dfg.com 是一个合法的E_mail地址格式
正则表达式分析:
通常情况下 E_mail 的格式为 “ X@X.com.cn ”。字符 X 表示任意的一个或多个字符,@ 为 E_mail 地址中的特殊符号,符号 @ 后还有一个或多个字符,之后是字符“ .com ”,也可能后面还有类似“ .cn ”的标记。总结 E_mail 地址的这些特点,因此可以书写正则表达式“ \\w+@\\w+(\\.\\w+)*\\.\\w+ ”来匹配 E_mail 地址。字符集“ \\w ”匹配任意字符,符号 “ + ”表示字符可以出现一次或多次,表达式“ (\\.\\w+)* ”表示形如“ .com ”格式的字符串可以出现 0 次或多次。而最后的表达式“ \\.\\w+ ”用于匹配 E_mail 地址中的结尾字符,如“ .com ”。
二、字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“ + ”可以达到附加新字符或字符串的目的,但“ + ”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。在J2SE 5.0 新增了可变的字符序列 String-Builder 类,大大提高了频繁增加字符串的效率。
public class Jerque{
public static void main(String[] args){
String str=""; //创建空字符串
long starTime = System.currrentTimeMilis(); //定义对字符串执行操作的起始时间
for(int i = 0 ;i < 10000 ; i++){ //利用 for 循环执行 10000 次操作
str = str + i; //循环追加字符串
}
long endTime=System.currentTimeMillis(); //定义对字符串操作后的时间
long time = endTime - starTime; //计算对字符串执行操作的时间
System.out.peintln("String 消耗的时间:" + time); //将执行时间输出
StringBuilder builder = new StringBuilfer(""); //创建字符串生成器
starTime=System.currentTimeMillis();
for(int j = 0 ; j < 10000 ; j++){
builfer.apppeng(j);
}
endTime=System.currentTimeMillis();
time=endTime-starTime;
System.out.println("StringBuilder 消耗时间:" + time);
}
}
运行结果为:
String 消耗时间:668
StringBuilder 消耗时间: 2
新创建的 StirngBuilder 对象初始容量是 16 个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则 StringBuilder 对象将自动增加长度以容纳被附加的字符。若要使用 StringBuilder 最后输出字符串结果,可使用 toString() 方法。利用 StringBuilder 类中的方法可动态地执行添加、删除和插入等字符串的编辑操作。常用方法:
( 1 )append() 方法
该方法用于向字符串生成器中追加内容。通过该方法生的多个重载方式,可实现接受任何类型的数据,如:int 、boolean 、char 、String 、double 或者另一个字符串生成器等。
语法: append(content)
content :表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。
( 2 )insert(int offset ,arg) 方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入 int 、float 、char 和 boolean 等基本数据类型或其他对象。
语法 :insert(int offser , arg)
offset :字符串生成器的位置。该参数必须大于等于 0 ,且小于等于次序列的长度。
arg :将插入至字符串生成器的位置。该参数可以是任何的数据类型或其他对象。
StringBuilder bf = new StringBuilder("hello"); //创建字符生成器
bf.insert(5 , "word"); //添加至字符生成器的内容
System.out.println(bf.toString()); //输出为 helloword
( 3 )delete(int start , int end) 方法
start :将要删除的字符串的起点位置。
end :将要删除的字符串的终点位置。
StringBuilder bf = new StringBuilder("StringBuilder"); //创建字符生成器
bf.delete(5,10); //删除的子字符串
System.out.println(bf.toString()); //此时输出为 Strinder
对于学习Java,看书,看视频,看官方文档,看API,多练,多想。
要时刻学习,更新很快,要学习新技术,好好加油,祝终成大神。