API:
Application Programming Interface : 应用 程序编程 接口
Api | String |
StringBuilder |
下载api帮助文档:(使用流程)
看 类 在哪个包下(用于导包)
看 类 的描述(类的作用)
看 构造方法 (创建这个类的方法)
看 成员方法 (看调用什么方法,是否有返回值)
Scanner | next() | 结束标记:空格、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