API基础

API基础

一、String (字符串类型)

1、java.lang.String使用了final修饰,不能被继承;

2、字符串底层封装了字符数组及针对字符数组的操作算法;

3、字符串底层封装了字符数组及针对字符数组的操作算法;

4、Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码

二、字符串常量池

1、Java对字符串有一个优化措施:字符串常量池

2、Java推荐我们使用字面量和直接量的方式来创建字符串,并且会缓存所有以字面量形式创建的字符串对象,当使用相同字面量再次创建字符串时会重用对象以减少内存开销,避免内存中堆积大量内容相同的字符串对象

3、在使用字面量创建字符串时,JVM会检查是否有该对象

(1)若没有,则创建该字符串的对象的并存入常量池;

(2)若有,则直接将该对象返回而不在创建一个新的字符串对象;

三、字符串常用方法

1、length():

返回当前字符串的长度(字符个数)

  String str = "我爱Java!";
        int len = str.length();
        System.out.println(len);// 7

2、indexOf():

(1)检索给定字符串在当前字符串的开始位置

(2)如果当前字符串不包含给定内容时,返回值为-1

(3)int indexOf(String str,int fromIndex)

从指定位置开始检索第一次出现给定字符串的位置

String str = "thinking in java"; //检索in在字符串str中出现的开始位置
int index = str.indexOf("in");
System.out.println(index); //2
//如果当前字符串不包含给定内容时,返回值为-1;
index = str.indexOf("IN");
System.out.println(index);//-1
index = str.indexOf("in",3);//从第4个字符开始找in第一次出现的位置
index = str.lastIndexOf("in");//检索最后一次出现in的位置

3、substring():

String substring(int start,int end)

(1)截取当前字符串中指定范围内的字符串,两个参数分别为开始位置的下标和结束位置的下标;

(2)注:在JAVA API中通常使用两个数字表示范围时是"含头不含尾"的.

String str = "www.tedu.cn";
String name = str.substring(4,8);
System.out.println(name);//tedu
name = str.substring(4);
System.out.println(name);//tedu.cn

4、charAt():

​ char charAt(int index)

​ 返回当前字符串中指定位置上的字符

5、trim():

去除一个字符串两边的空白字符

String str =" hello jinde         ";
        System.out.println(str);// hello jinde   有空格
        str = str.trim();
        System.out.println(str);//hello jinde(去除字符串两边的空白字符)

6、startsWith()和endsWith()

(1)boolean startsWith(String str)

​ 判断当前字符串是否是以给定的字符串开始的

(2)boolean endsWith(String str)

​ 判断当前字符串是否是以给定的字符串结尾的

String str = "thinking in java";
boolean starts = str.startsWith("think"); //判断str是否以think开头
System.out.println("starts"+starts); //true

boolean ends = str.endsWith(".png"); //判断str是否以.png结尾
System.out.println("ends"+ends); //false

7、toUpperCase()和toLowerCase()

(1)String toUpperCaseDemo

​ 将当前字符串的英文部分转为全大写

(2)String toLowerCaseDemo

​ 将当前字符串的英文部分转为全小写

String str = "我爱Java!";
String upper = str.toUpperCase();//将str英文部分全转为全大写
System.out.println(upper); //我爱JAVA!

String lower = str.toLowerCase();//将str英文部分全转为全小写
System.out.println(lower); //我爱java!

8、valueOf()

​ static String valueOf(数据类型 a)

​ (1)将其他数据类型转换为String

​ (2)调用时用String.valueOf();

int a = 123;
String s1 = String.valueOf(a); //将int型变量a转换为String类型赋值给s1
System.out.println(s1);  //123

四、StringBuilder类

由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为了解决这个问题,java提供了StringBuilder类.

1、StringBuilder称为可变字符串

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

3、当数组容量不足时,会自动扩容;

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

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);
    }
}
buf-> char[]{A, C, B, 0, 0, 0, 0, 0, 0, 0, 0...0}
//           0  1  2  3  4  5
StringBuilder buf = new StringBuilder();
buf.append("A") 
   .append("A") 
   .append("A")
   .append("B") 
   .insert(1,"C")
   .delete(2,4);
Stirng str = buf.toString();

(1)append() :追加,在StringBulider的后面添加字符,当容量满了自动扩容,扩容规则1倍+2

(2)insert(位置,char) 插入字符

(3)delete(开始位置,结束位置):删除一点范围的字符,包括开始,不包括结束。

(4)StringBuilder的API返回的大多是当前对象,可以连续使用调用方法。

(5)toString()方法可以将StringBuilder转换为String。

五、正则表达式

1、用于测试、检测字符串规则的表达式

2、经常用于检测字符串是否符合特定的规则,在网站上经常用于检测用户输入

数据是否符合规范:

(1)检测用户名是否为8-10位数字 英文(大小写)

(2)检测电话号码是否符合规则

(3)检测邮箱地址是否符合规则等

3、Java提供了正则API,用于检测一个字符串是否符合正则规则

​ boolean matches(正则)检测当前字符串是否符合正则规则

s1="helloworld";
s2="hellokiter"
boolean b1 = s1.matches(rule);//true
boolean b2 = s2.matches(rule);//true

4、字符集:匹配一个有效字符范围

(1)语法:[]

(2)意义:

​ 匹配一个字符,其有效范围:123456中的某一个

​ 例子:

hello[123456]
    //匹配六个字符
    //前5个必须是Hello
    //第六个字符必须是123456中的一个

5、字符范围

规则正则表达式范围
匹配 0~9 一个字符[0123456789][0-9]
匹配A-Z一个字符[ABCDEFGHIJKLMNOPQRSTUVWXYZ][A-Z]
匹配a-z一个字符[a-z]
匹配a-zA-Z一个字符[a-zA-Z]
Hello[1-6]

6、预定义字符集

规则正则预定义字符集栗子
匹配一个数字[0-9]\dHello\d
匹配一个单词字符[a-zA-Z0-9_]\wA\w
匹配一个空白字符\sHello\sWorld
匹配任意一个字符.A.
匹配一个非数字\D
匹配一个非空白\S
匹配一个非单词字符\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));
    }
}

7、简写数量词

​ 约定左侧元素出现的次数。

例子:

\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{0,} 等价,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”

六、分组

​ 将一组规则作为整体进行处理

例子正则:

  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));
    }
}

七、Java正则API

1、matches

​ 检查字符串是否整体符合正则表达式规则

2、plit 劈开字符串

(1)将一个字符串劈开为几个子字符串

(2)使用

str 存储的是被劈开的字符串
正则 用于匹配劈开的位置点, 如: , 或者 \.
返回值 是劈开以后的数组,每个元素是 劈开的子字符串段落
      劈开以后,匹配的位置就没有了
String[] arr = str.split(正则);

(3)案例

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]);
}

3、replaceAll 全部替换

(1)replace: 替换;all:全部;将正则表达式匹配到的字符,都替换为新字符串

(2)

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值