API(Application Programming Interface):应用程序编程接口
java.lang包——核心包
String类
特点:它的对象创建后不能被更改
String str="abc";
String str;
str="abc";
复制代码
特殊性:
- 所有引用数据类型都必须使用new关键字创建,而字符串类型还能通过直接赋值创建
- 字符串常量是一个对象,因此可以调用字符串常量的方法
- 字符串类型属于引用数据类型,但在方法调用时采用的是传值调用
- 字符串类型1可以用加号“+”运算符将字符串类的对象与其他各种类型(基本数据类型或引用数据类型)的对象连接起来
- 字符串类型可以用赋值运算符“=”和“+=”进行赋值
- 字符串的值本身是常量,是不可变的
常用API
构造方法
常用方法 |
说明 |
public String() |
创建一个空白字符串,不含有任何内容 |
String s1=new String();
System.out.println(s1);
复制代码
常用方法 |
说明 |
public String(String original) |
根据传入的字符串内容,来创建字符串对象 |
String s2=new String("我是");
System.out.println(s2);
复制代码
常用方法 |
说明 |
public String(char[] chs) |
根据字符数组的内容,来创建字符串对象 |
char[] chars={'a','b','中'};
String s3=new String(chars);
System.out.println(s3);
复制代码
常用方法 |
说明 |
public String(byte[] chs) |
根据字节数组的内容,来创建字符串对象 |
byte[] bytes={97,12,34,14};
String s4=new String(bytes);
复制代码
常用方法 |
说明 |
public String(StringBuffer buffer) |
从一个缓冲性字符串创建字符串实例 |
常用方法
长度
常用方法 |
说明 |
public int length() |
返回此字符串的长度 |
String name="Ilove";
int length=name.length();
System.out.println(length);
复制代码
比较
常用方法 |
说明 |
public boolean equals(Object anObject) |
将此字符串与指定对象进行比较。只关心字符内容是否一致 |
public boolean equalsIgnoreCase(String anotherString) |
将字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致 |
package com.qfedu.string;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
String okName="itheima";
String okPassword="123456";
Scanner sc=new Scanner(System.in);
System.out.println("登录名称:");
String name=sc.next();
System.out.println("密码:");
String password=sc.next();
if (okName.equals(name)&&okPassword.equals(password)){
System.out.println("登录成功");
}else {
System.out.println("用户名或密码错误了!!!");
}
String sysCode="23AdFH";
String code="23aDfH";
System.out.println(sysCode.equals(code));
System.out.println(sysCode.equalsIgnoreCase(code));
}
}
复制代码
常用方法 |
说明 |
public boolean contains(CharSequence s) |
字符串是否包含某个字符串 |
String name3="金三胖是最厉害的80后,金三胖棒棒的!我好爱金三胖"
System.out.println(name3.contains("金三胖"))
复制代码
常用方法 |
说明 |
public boolean startsWith(String prefix) |
字符串是否以指定的前缀开始 |
public boolean endsWith(String prefix) |
字符串是否以指定的后缀结束 |
String name3="金三胖是最厉害的80后,金三胖棒棒的!我好爱金三胖"
System.out.println(name3.startsWith("金三胖"))
System.out.println(name3.endsWith("金三胖"))
复制代码
常用方法 |
说明 |
public int compareTo(String str) |
比较两个字符串的大小 |
字符串的大小是基于字符的Unicode码值,返回的整数值是该字符Unicode码值之差
String s5="123a";
String s6="123A";
int result=s5.compareTo(s6);
System.out.println(result);
复制代码
检索
常用方法 |
说明 |
public int indexOf(char ch) |
返回字符在字符串中的位置(索引) |
public int indexOf(String str) |
返回字符串在字符串中的位置(索引) |
public int lastIndexOf(int ch) |
返回字符在字符串中的位置(索引),反向查找 |
int lastIndexOf(String str) |
返回字符串在字符串中的位置(索引),反向查找 |
字串
常用方法 |
说明 |
public String substring(int beginIndex,int endIndex) |
根据开始和结束索引进行截取,得到新的字符串(包前不包后) |
public String substring(int beginIndex) |
从传入的索引处截取,截取到末尾,得到新的字符串 |
String name2="java是最厉害的编程语言";
String rs=name2.substring(0,9);
System.out.println(rs);
复制代码
替换
常用方法 |
说明 |
public String replace(CharSequence target,CharSequence replacement) |
使用新值,将字符串中的旧值替换,得到新的字符串 |
String name3="金三胖是最厉害的80后,金三胖棒棒的!我好爱金三胖";
String rs3=name3.replace("金三胖","***");
System.out.println(rs3);
复制代码
大小写
常用方法 |
说明 |
public String toLowerCase |
返回一个新的字符串,其中所有的字符转换为小写 |
public String toUpperCase |
返回一个新的字符串,其中所有字符转换为大写 |
其他API
常用方法 |
说明 |
public char charAt(int index) |
获取某个索引位置处的字符 |
String name="Ilove";
char c=name.charAt(1);
System.out.println(c);
复制代码
常用方法 |
说明 |
public char[] toCharArray() |
将当前字符串转换成字符数组返回 |
char[] chars=name.toCharArray();
for (int i=0;i<chars.length;i++) {
char ch=chars[i];
System.out.println(ch);
}
复制代码
常用方法 |
说明 |
public String[] split(String regex) |
根据传入的规则切割字符串,得到字符串数组返回 |
String name4="王宝强,贾乃亮,陈羽凡";
String[] names=name4.split(",");
System.out.println(names[0]);
复制代码
常用方法 |
说明 |
public String trim() |
返回一个新的字符串,其中前导空白和尾部空白均被删除 |
public String toString() |
返回字符串对象本身的值 |
public String concat(String str) |
连接两个字符串 |
public byte[] getBytes() |
返回String编码的byte数组 |
String s1="java"
byte[] b=s1.getBytes()
for(byte b1:b){
System.out.print(b1+"-")
}
复制代码
CharSequence是一个接口,包括CharBuffer、Segment、String、StringBuffer、StringBuilder等实现
案例1(验证码)
package com.qfedu.string;
import java.util.Random;
public class Demo04 {
public static void main(String[] args) {
String datas="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String code="";
Random r=new Random();
for (int i=0;i<5;i++){
int index=r.nextInt(datas.length());
char c=datas.charAt(index);
code+=c;
}
System.out.println(code);
}
}
复制代码
案例2(登录)
package com.qfedu.string;
import java.util.Scanner;
public class Demp05 {
public static void main(String[] args) {
String okLoginName="admin";
String okPassword="123456";
Scanner sc=new Scanner(System.in);
for (int i=1;i<=3;i++){
System.out.println("请输入登录名称");
String loginName=sc.next();
System.out.println("请输入登陆密码");
String password=sc.next();
if (okLoginName.equals(loginName)){
if (okPassword.equals(password)){
System.out.println("登陆成功!");
break;
}else {
System.out.println("您的密码不正确!您还剩余"+(3-i)+"次机会登录");
}
}else {
System.out.println("您的登录名称不正确!您还剩余"+(3-i)+"次机会登录");
}
}
}
}
复制代码
案例3(隐私号码)
package com.qfedu.string;
import java.util.Scanner;
public class Demo06 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请您输入您的手机号码");
String tel=sc.next();
String before=tel.substring(0,3);
String after=tel.substring(7);
String s=before+"****"+after;
System.out.println(s);
}
}
复制代码
StringBuffer类:缓存型字符串
只能通过构造方法创建
常用方法 |
说明 |
public StringBuffer() |
创建一个空白的可变的字符串对象,不包括人任何内容 |
public StringBuffer(String str) |
创建一个指定字符串内容的可变字符串对象,容量为str+16 |
public StringBuffer(int capacity) |
构造长度为0,容量为capacity的字符串缓冲区 |
常用API
常用方法 |
说明 |
int capacity() |
返回当前容量 |
void ensureCapacity(int minCapacity) |
确保容量至少等于指定的最小值minCapacity |
boolean equals(Object o) |
从Object继承而来,不能比较StringBuffer的值 |
public int length() |
返回此字符串的长度 |
public char charAt(int index) |
获取某个索引位置处的字符 |
public int indexOf(char ch) |
返回字符在字符串中的位置(索引) |
public int lastIndexOf(int ch) |
返回字符在字符串中的位置(索引),反向查找 |
public String substring(int beginIndex,int endIndex) |
根据开始和结束索引进行截取,得到新的字符串(包前不包后) |
public String substring(int beginIndex) |
从传入的索引处截取,截取到末尾,得到新的字符串 |
public String toString() |
返回字符串对象本身的值 |
StringBuffer append(String str) |
将指定的字符串追加到此实例的值的尾部 |
StringBuffer append(StringBuffer sb) |
将指定的StringBuffer追加到此实例的值的尾部 |
StringBuffer insert(int offset,String str) |
将字符串插入此实例的offset位置处 |
StringBuffer delete(int start,int end) |
移除此实例从start到end之间的字符 |
StringBuffer reverse() |
将此实例的字符串逆序排列 |
StringBuffer replace(int start,int end,String str) |
用str替换此实例从start到end之间的字符 |
String和StringBuffer比较
比较项 |
String类 |
StringBuffer类 |
占用空间 |
实际字符 |
实际字符+缓冲区 |
占用的空间能否被修改 |
不能 |
可以,在字符串及缓冲区内修改 |
何时使用新的空间 |
每次操作会使用新的空间 |
缓冲区大小不够时才使用新的空间 |
运行效率 |
低,使用i虚拟的空间会降低效率 |
很高 |
使用场合 |
容易编写和理解,适用一般性的需要 |
大量字符处理,特别时循环处理字符 |
String类和StringBuffer类的互换
Sting s="abc"
StringBuffer sb=new StringBuffer(s);
String s=sb.toString();
复制代码