13.API:String和StringBuilder

API:

Application Programming Interface : 应用 程序编程 接口

ApiString
StringBuilder


下载api帮助文档:(使用流程)

看 类 在哪个包下(用于导包)

看 类 的描述(类的作用)

看 构造方法 (创建这个类的方法)

看 成员方法 (看调用什么方法,是否有返回值)


Scannernext()结束标记:空格、Tab键返回值都为String
nextline()结束标记:回车换行符

注意:当nextInt()【数字+回车】和nextline()【检测到结束标记】配合使用,nextline()遇见空格就没机会输入。

建议:以后使用键盘录入数据,如果是整数和字符串一起接收,建议使用next()接收。

但未来都是用户输入的,并不会遇见上面的问题


String:

构造方法

String a = new String("abc");
"xxx"
public String(char[] a)根据字符数组内容,来创建字符串

成员方法

char  charAt(int  Index)返回指定索引值的char值
char[] toCharArray() 将字符串拆分为字符数组并返回(主要掌握)
boolean equals(Object anObject)   区分大小写

boolean equalsIgnoreCase(String anotherString)忽略大小写的-----可应用于  “验证码”

String subString(int beginIndex ,int endIndex) 截取包含头不包含尾
String subString(int beginIndex) 从传入的索引处截取到末尾

String replace(CharSequence target ,CharSequence replacement )

target是旧值,replacement是新值,新值替换旧值

String[] split(String regex) 传入的数据作为规则切割并返回数组
int length()  字符个数

注意!!!!:equals参数是对象,equalsIgnoreCase参数是String


String的特点:

1.java程序中,所有 双引号 的字符串,都是 String这个类的对象

(意思是,只要见到 "xxx" ,不管是在表达式里,还是单独出现,都是new了一个String对象,在创建"xxx"时候,只要字符序列相同(顺序和大小写),无论在代码中出现几次,jvm都只会创建一个String对象,并在字符串常量池中维护。有则直接复用,没有就在字符串常量池创建新的地址)

2.字符串中的常量,在创建之后  !!!不能被修改!!!,只能被替换(重点)

3.虽然String的值不可改变,但可以共享(字符串常量池)

String a1 = "abc123";

a1  = "aaa111"; 

a1的地址值只是被新的地址值替换了,并没有修改

public String(char[] a)根据字符数组内容,来创建字符串

char[]  a = {'a','b','c'};

String a1 = new String(a);

sout(a1) = abc

==号作比较:

基本数据类型:比较具体的值

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

若比较字符串的内容是否相同,可以调用String字符串的方法

 .equals() 【区分大小写】

.equalsIgnoreCase()【忽略大小写的-----可应用于  “验证码”】

二者返回的都是boolean


创建字符串的对象对比:

只要见到 "xxx" ,不管是在表达式里,还是单独出现,都是new了一个String对象,在创建"xxx"时候,只要字符序列相同(顺序和大小写),无论在代码中出现几次,jvm都只会创建一个String对象,并在字符串常量池中维护。有则直接复用,没有就在字符串常量池创建新的地址

String a = "abc";

String b = "abc";

JDK7之前  “字符串常量池” 在方法区中,之后都在 堆内存中

另外一个 String a = new String("abc");---类似“abc”创建了一个副本

首先见到双引号,字符串常量池中就新建一个对象,且在堆内存中又new了一个对象,等于创建了两个对象,比较耗内存

String a = new String("abc");

String b = new String("abc");

sout(a==b)=false


String a1 = "abc";

String a2 = "ab";

String a3 = a2 + "c";   (变量加常量)

sout(a1 == a3) = false

jvm在堆内存调用StringBuilder,也就是new 一个StringBuilder,创建了一个新的地址值,然后会将a2和"c"用append()方法拼接起来,最后再调用toString()方法,创建一个新的地址值存放String,并返回地址值

堆内存:

Stringbuilder s = new Stringbuilder();-----创建新的地址值

s.append(a2).append("c");-----调用方法

s.toString()-----调用方法,并创建一个地址值用于存储转好的String值

String a1 = "abc";

String a2 = "a" + "b" + "c"; (此处是常量加常量存在常量优化机制)

sout( a1 == a2 ) = true 

java存在常量优化机制,在编译的时候,会将 "a" + "b" + "c"拼接成"abc"


char  charAt(int  Index) 返回指定索引值的char值

数组长度:数组.length  (属性)

字符串长度:字符串.length()   (方法)

char[] toCharArray() 将当前子u从拆分为字符数组并返回(主要掌握这个)

判断是否在范围内;

大写:ch >= 'A'  &&  ch <= 'Z'  (Ascall:65开始)

小写:ch >= 'a'  &&  ch <= 'z'  (Ascall:97开始)

数字:ch >= '0'  &&  ch <= '9'  (Ascall:48开始)

表达式右边,由于是char字符,会自动转为int

手机号隐藏:

String subString(int beginIndex ,int endIndex) 截取包含头不包含尾

String subString(int beginIndex) 从传入的索引处截取到末尾

敏感词屏蔽:

String replace(CharSequence target ,CharSequence replacement )

CharSequence是String的干爹。target是旧值,replacement是新值

切割字符串;

String[] split(String regex) 传入的数据作为规则切割并返回数组

封装数据的类,需要放入domain包下(新建)


StringBuilder:

构造方法

StringBuilder s = new StingBuilder()
StringBuilder s = new StingBuilder(String str)

成员方法

StringBuilder append(任意类型) 添加数据,并返回对象本身
StringBuilder reverse() 返回相反的字符序列(每一个字都相反)
int length()  返回字符串长度
String toString()  将StringBuilder转为String

注意:有参构造只能放String类型

含义:是一个可变的字符串类,是一个容器(StringBuilder中有很多重载方法,所以任何数据类型都可以装,但打印出来的都是String类。可变指的是调用方法后数据可以被改变)

作用:提高字符串的操作效率(性能提高)

快捷键:ctrl+alt+M  快速创建方法

StringBuilder s = new StingBuilder()  

sout(s) = 空 

new StingBuilder()  只是一个空的容器

StringBuilder s = new StingBuilder("ssss")

sout(s) = ssss 

StringBuilder append(任意类型) 添加数据,并返回对象本身

StringBuilder s = new StingBuilder()  

s.append(123);

s.append("abc");

s.append(true);

sout(a)= 123abctrue------底层会使用到toString()

StringBuilder reverse() 返回相反的字符序列(每一个字都相反)

例如:123321  不是:123123

String和StringBuilder最根本的区别:

String不可变

StringBuilder可变

StringBuilder提高效率的原理:

无论加append()多少次,StringBuilder在堆内存只创建一次,拼接完成统一toString()

String类型转StringBuilder类型:

String a1  = "abc";

StringBuilder a2 = new StringBuilder(a1);

StringBuilder类型转String类型:

StringBuilder a1 = new StringBuilder();

a1.toString();


疑问:

String和StringBuilder这个类比较特殊,打印其对象名,不会出现内存地址,而是该对象所记录的内容(得学到:面向对象---继承、Object类  才能解答)?

数组是属于哪个包下的?---------是数据类型的一种,不属于某个包下,api是array

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值