认识API&了解常用字符串的原理-学习笔记

API&字符串

API

API(Application Programming Interface):应用程序编程接口

简单理解:API就是别人已经写好了的东西,我们不需要自己编写,直接使用即可。

 public static void mian (String[] args){
     Random r = new Random();
     int number = r.nextInt(100);
 }

java API:指的就是JDK中提供的各种功能的java类

这些类将低层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可

API帮助文档:帮助开发人员更好的使用API和查询API的一个工具

如何使用帮助文档

  1. 打开API帮助文档

  2. 点击显示,并找到索引下面的输入

  3. 在输入框中输入类名并点击显示

  4. 查看类所在的包

  5. 查看类的描述

  6. 查看构造方法

  7. 查看成员方法

字符串

字符串在开发中的应用场所

String概述:

java.lang.String 类代表字符串,java程序中的所有字符串文字(例如"abc")都是此类的对象

 String name = "张三";
 String schoolName = "程序猿";

String的注意点

字符串的内容是不会发生改变的,它的对象在创建后不能被更改

 String name = "张三";
 String schoolName = "程序猿";
 System.out.println(name+schoolName);//字符串拼接产生一个新的字符串

创建String对象的两种方式

  1. 直接赋值

     String name = "张三";
  2. new

    空参构造:可以获取一个空白的字符串对象

     String s2 = new String();
     System.out.println("@"+s2+"!");//""

    传递一个字符串,根据传递的字符串内容在创建一个新的字符串对象、

     String s3 = new String("abc");
     System.out.println(s3);

    传递一个字符数组,根据字符数组的内容在创建一个新的字符串对象

    需求:我们要修改字符串的内容

     char[] chs ={"a","b","c","d"};
     String s4 = new String(chs);
     System.out.println(s4);//abcd

    传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象 应用场景:以后在网路当中传输的数据其实都是字节信息

    需求:我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了

     byte[] bytes = {97,98,99,100};
     String s5 = new String(bytes);
     System.out.println(s5);//abcd

java的内存模型

 

直接赋值的String

注意:StringTable(串池)在JDK7版本开始从方法区中挪到了堆内存

 public class StringDemo{
     public static void main(String[] args){
         String s1 = "abc";
         String s2 = "abc";
     }
 }

当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在。

不存在:创建新的

存在:复用

new出来的String

 public class Test{
     public static void main(String[] args){
         char[] chs ={'a','b','c'};
         String s1 = new String(chs);
         String s2 = new String(chs);
     }
 }

每new出来的String都会在堆内存中开辟一个新的空间,不会复用,比较浪费内存空间

java的常用方法(比较)

  String s1 = "abc";
  String s2 = "abc";
  System.out.println(s1 == s2);//true
  String s1 = "aaa";
  String s2 = "bbb";
  System.out.println(s1 == s2);//false
 String s1 = new String('abc');
 String s2 = "abc";
 System.out.println(s1 == s2);//false

== 号比较的到底是什么?

  • 基本数据类型

 int a = 10;
 int b = 20;
 System.out.println(a == b);//false

基本数据类型比较的是数据值

  • 引用数据类型

 String s1 = new  String("abc");
 String s2 = new String("abc");
 System.out.println(s1 == s2);//false 

引用数据类型比较的是地址值

字符串比较

  • boolean equals方法(要比较的字符串) 完全一样结果才是true,否则为false

  • boolean equalslgnoreCase(要比较的字符串) 忽略大小写的比较

 Scanner sc = new Scanner(System.in);
 System.out.println("请输入一个字符串");
 String str1 = sc.next();//abc
 String str2 ="abc";
 System.out.println(ster1 = ster2);//false

结论:以后只要想比较字符串的内容,就必须要用String里面的方法

遍历字符串(案例)

  • public char charAt(int index): 根据索引返回字符

  • public int length(): 返回此字符串的长度

  • 数组的长度:数组名.length

  • 字符串的长度:.字符串对象.length()

手机号屏蔽

  • String substring(int beginIndex , int endIndex) 截取

注意点:包头不包尾,包左不包右

只有返回值才是截取的小串

  • String substring(int beginIndex) 截取到末尾

敏感词替换

  • String replace(旧值,新值)替换

注意点:只有返回值才是替换之后的结果

StringBuilder

StringBuilder概述

StringBuilder可以看成一个容器,创建之后里面的内容是可变的

  • 作用:提高字符串的操作效率

StringBuilder构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象
 StringBuilder sb = new StringBuilder("abc");

StringBuilder常用方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()反转容器中的内容
public int length()返回长度(字符出现的个数)
public String toString()通过toString()就可以实现把StringBuilder转换为String

StringJoiner

StringJoiner概述

  • StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的

  • 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场很少有人用

  • JDK8出现的

StringJoiner构造方法

方法名说明
public StringJoiner(间隔符号)创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号)创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号,结束符号
 StringJoiner sj = new StringJoiner("---");
 StringJoiner sj = new StringJoiner(", ","[","]");

StringJoiner的成员方法

方法名说明
public StringJoiner add(添加的内容)添加数据,并返回对象本身
public int length()返回长度(字符出现的个数)
public String toString()返回一个字符串(该字符串就是拼接之后的结果)

字符串原理

  • 扩展底层原理1:字符串储存的内存原理

    • 直接赋值会复用字符串常量池中的

    • new出来不会复用,而是开辟一个新的空间

  • 扩展底层原理2:==号比较的到底是什么?

    • 基本数据类型比较数据值

    • 引用数据类型比较地址值

  • 扩展底层原理3:字符串拼接的底层原理

  • 扩展底层原理4:StringBuilder提高效率原理图

    • 所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存

  • 扩展底层原理5:StringBuilder源码分析

默认创建一个长度为16的字节数组

添加的内容长度小于16,直接存

添加的内容大于16会扩容(原来的容量*2+2)

如果扩容之后还不够,以实际长度为准

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值