JAVA核心API

一  STRINGBUILDER

String类型的连接性能不好 , java提供了StringBuilderf

解决字符串连接性能问题

简单理解StringBuilder性能好 ! (重点)

String s1="ABC";

String s2="def" ;

String s3=s1+s2;

字符串连接性能测试 :

String str= " ";

long t1=System.currentTimeMillis();

for(int i=0; i<50000; i++){

str=str+"A";

}

long t2=System.currentTimeMillis();

System.out.pritnln(t2-t1);

StringBuilder 用于提升String字符串的连接性

=StringBuilder 称为可变字符串

=StringBuilder内部也是字符数组,其API 可以直接修改其内容

=当数组容量不足的时候,会自动扩容

=运算期间会尽力减少创建数组的数量

package string ;
    public class StringBuilderDemo03 {
       public static void main ( String [] args )
{
/*
* 测试 StringBuilder 的连接性能
*/
StringBuilder buf = new
    StringBuilder ();
long t1 =
       System . currentTimeMillis ();
for ( int i = 0 ; i < 50000 ; i ++ ){
                   buf . append ( "A" );
}
long t2 =
System . currentTimeMillis ();
System . out . println ( t2 - t1 );
}
}

 StringBuilder API

buf-> char[ ] {A,C,B,0,0,0,0,0,0,0,0.....0}
     StringBuilder  buf = new StringBuilder();

     buf.append("A")

          .append("A")

          . append ( "A" )
          . append ( "B" )
          . insert ( 1 , "C" )
          . delete ( 2 , 4 );
          Stirng str = buf . toString ();
=append() 追加  在StringBuilder的后面添加字符 , 当容量满了 会自动扩容, 扩容规则 1倍+2
= insert(位置 ,字符) 插入字符;
= delete(开始位置 结束位置): 删除一定范围的字符 包括开始 不包括结束 
= StringBuilder的API返回的大多是当前对象 ,  可以连续使用  调用方法
=toString() 方法可以将StringBuilder转换为String
二   正则表达式
用于检测 测试字符串规则的表达.
经常用于检测字符串是否符合特定的规则 在网站上经常用于检测用户输入是否符合规范:
=检测 用户名 是否为8-10 数字 英文 (大小写)
=检测 电话号码是否符合规则
=检测 邮箱地址是否符合规则
=等
正则HelloWorld
最简单的正则表达式 : "HelloWorld" 表示
= 一共有10个字符
= 出现的顺序必须是HelloWorld
= java提供了正则API ,  用于检测一个字符串的是否符  正则规则
  
   boolean matchs(正则)  检测当前字符串是否符合则规则 
正则规则 rule = "HelloWorld"
字符串: s1 = "HelloKitty";
字符串: s2 = "HelloWorld";
// s1 s2 中那个字符串符合 rule 约定的规则?
boolean b1 = s1.matches(rule); //false
boolean b2 = s2.matches(rule); //true
package string ;
public class RegDemo05 {
public static void main ( String [] args )
{
/*
* 测试正则表达式
*/
// 定义正则表达式
String rule = "HelloWorld" ;
// 定义被检测的字符串
String s1 = "HelloKitty" ;
String s2 = "HelloWorld" ;
// 检测 s1 是否符合规则
boolean b1 = s1 . matches ( rule );
// 检测 s2 是否符合规则
boolean b2 = s2 . matches ( rule );
System . out . println ( b1 );
System . out . println ( b2 );
}
}
三    字符集 
匹配一个有效的字符范围 
语法: [1 2 4 5 6]
意义 :
= 匹配一个字符 
= 其有效范围 : 1 2 3 4 5 6 中的某一个
正则规则例子 :
hello[ 1 2 3 4 5 6 ]
= 匹配6个字符 
= 前五个必须是Hello
= 第六个字符 必须 1 2 3 4 5 6中的一个
如  可以匹配字符串 :
= "Hello1"
="Hello2"
 
= "Hello3"
.............
= "Hello6"
= "Hello7" 不可以匹配
= "HelloA" 不可以
字符范围 
| 规则              | 正则表达式                   | 范围     |
| ------------------| ----------------------------| -------- |
| 匹配 0~9 一个字符  | [0123456789]                 | [0-9]    |
| 匹配A-Z一个字符    | [ABCDEFGHIJKLMNOPQRSTUVWXYZ] | [A-Z]    |
| 匹配a-z一个字符    | ...                          | [a-z]    |
| 匹配a-zA-Z一个字符 |                              | [a-zA-Z] |

预定义字符集

| 规则               | 正则        | 预定义字符集 | 栗子         |
| ------------------ | ------------| ------------ | ------------ |
| 匹配一个数字       | [0-9]        | \d           | Hello\d      |
| 匹配一个单词字符   | [a-zA-Z0-9_] | \w           | A\w          |
| 匹配一个空白字符   |              | \s           | Hello\sWorld |
| 匹配任意一个字符   |              | .            | A.           |
| 匹配一个非数字     |              | \D           |              |
| 匹配一个非空白     |              | \S           |              |
| 匹配一个非单词字符 |              | \W           |              |

栗子 , 网站上规则 用户名规则是6 个单词字符 : 

正则规则 : \w\w\w\w\w\w

java String : \w\w\w\w\w\w

package string ;
public class RegDemo07 {
public static void main ( String [] args )
{
/*
* 测试 用户名规则: 6 个单词字符组成
* - \ java 字符串中需要进行转义为 \\
*/
// 正则表达式 :
String reg = "\\w\\w\\w\\w\\w\\w" ;
System . out . println ( reg );
// 被检查的字符串
String s1 = "Jerry1" ; // 可以通过检查
String s2 = "Tom-12" ; // 不可以通过检查
String s3 = "Andy" ; // 不可以通过检查
System . out . println ( s1 . matches ( reg ));
System . out . println ( s2 . matches ( reg ));
System . out . println ( s3 . matches ( reg ));
}
}
四   数量词
 
约定左侧元素出现的次数
栗子 : 
\w\w\w\w\w\w 等价 \w{6}
语法 : 
X{ n }  规定左侧X出现n次
X{n,m}  规定左侧X出现最少n次 , 最多出现m次
X{0,n }  规定左侧X出现0到n次
X{n, } 规定左侧X出现最少n次
X?    和  X{0,1} 等价 X可以没有或者有一个 
X +   和 X{1, } 等价 , X至少有一个 多了随意 简称一个以上 
X*     和 X{ O,  } 等价, x至少有0个 多了随意 简称 : 0个以上
栗子 :
=网站的用户名是8-16个单词字符 : \w{8,16}
=网站的密码是单词字符  最少8个 多了不限 \w{8,}
=匹配Hello World 中间至有一个空白 :
Hello\s+World
不能匹配 : "HelloWorld"
不能匹配: "Hello World!"
能匹配: "Hello World"
能匹配: "Hello World"
能匹配: "Hello World"
五   特殊字符转义
如何匹配字符 [ ] ?  + * .  ,使用\特殊字符 进行转义!
\.  匹配 点
\[  匹配  [
\? 匹配 ?
\*  匹配  *
\+ 匹配 +
\\  匹配  \
  
如下正则的意义:匹配 www.tedu.cn 域名
www.tedu.cn    匹配:
www.tedu.cn 通过
wwwAteduAcn 通过
www-tedu-cn 通过
www\.tedu\.cn 匹配
www.tedu.cn 通过
wwwAteduAcn 不通过
www-tedu-cn 不通过
案例 :如何检查一个字符串是否为正确的 IPV4 地址 
正确 IP :
"192.168.1.25"
"192.168.199.1"
"10.0.0.20"
"8.8.8.8"
错误的 IP
"10-10-10-20"
"192 168 5 25"
正则: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
六  分组 
讲一组规则作为整体进行处理
栗子正则:
1. \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
2. (\d{1,3}\.)(\d{1,3}\.)(\d{1,3}\.)\d{1,3}
3. (\d{1,3}\.){3}\d{1,3}
package string ;
public class RegDemo11 {
public static void main ( String [] args )
{
/*
* 检查 IP 地址是否符合规则
*/
// 定义正则规则
//String reg =
"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
;
String reg = "\\d{1,3}(\\.\\d{1,3})
(\\.\\d{1,3})(\\.\\d{1,3})" ;
//String reg = "(\\d{1,3}\\.)
{3}\\d{1,3}"; // 测试分组 // 定义被检查的字符串
String ip1 = "192.168.2.70" ;
String ip2 = "10.0.0.20" ;
String ip3 = "8.8.8.8" ;
// 定义错误的被检查字符串
String ip4 = "192 168 2 70" ;
String ip5 = "192-168-2-70" ;
// 检查
System . out . println ( ip1 . matches ( reg ));
System . out . println ( ip2 . matches ( reg ));
System . out . println ( ip3 . matches ( reg ));
System . out . println ( ip4 . matches ( reg ));
System . out . println ( ip5 . matches ( reg ));
}
}
栗子2
1. \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
2. \d{1,3}  (\.\d{1,3})   (\.\d{1,3})   (\.\d{1,3})
3. \d {1,3} (\.\d{1,3}) {3}
区别 :
(\d{1,3}\.){3}\d{1,3} (分组){3} 分组的整体出
3
\d{1,3}\.{3}\d{1,3} \.{3} .必须出现2,可以
匹配 “192...168
七  java 正则API
matches 检查字符串是否整体符合正则表达式规则
split 劈开
replaceAll 全部替换
Split 劈开字符串 ( 重要 )
将一个字符串劈开为几个子字符串:
"192.168.5.140" 劈开为 "192" "168" "5" "140"
"1, Tom, 110, tom@tedu.cn " 劈开为 "1" "Tom"
"110" " tom@tedu.cn "
使用:
案例:
(\d{1,3}\.){3}\d{1,3} ( 分组 ){3} 分组的整体出现3次
\d{1,3}\.{3}\d{1,3} \.{3} . 必须出现 2 , 可以 匹配 “192...168”
str 存储的是被劈开的字符串
正则 用于匹配劈开的位置点, 如: , 或者 \.
返回值 是劈开以后的数组,每个元素是 劈开的子字符串段落
劈开以后,匹配的位置就没有了
String[] arr = str.split( 正则 ); replaceAll
replace: 替换
all :全部
将正则表达式匹配到的字符,都替换为新字符串
例子:
我草疫情又严重了,我去,又要做核算了
需要替换为 *** 疫情又严重了, *** ,又要做核算了。
代码:
String str = "1, Tom, 110, tom@tedu.cn" ;
// , , ,
// arr= "1" " Tom" " 110" "
tom@tedu.cn"
String [] arr = str . split ( "," );
for ( int i = 0 ; i < arr . length ; i ++ ){
System . out . println ( arr [ i ]);
}
Scanner scanner = new Scanner ( System . in );
System . out . print ( " 请输入 :" );
String str = scanner . nextLine ();
//String str = " 我草疫情又严重了,我去,又要做核 算了。";
// str.replaceAll(" 正则 ", 替换字符串 );
String s = str . replaceAll ( " [ 去草靠艹 ]" , "***" );
System . out . println ( s )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值