API(Application Programming Interface)
指JDK中提供的各种功能的java类
1.object类
(1)ToString 重写此方法 可以直接右键 get ToString
(2)equals 指示其他某个对象是否与此对象相等(基本类型:值是否相等,引用类型:地址值是否相等)
这个方法默认比的是地址值(意义不大),也需要重写一般用来比较对象的成员变量值是否相等
字符串的equals()方法是比较字符串的内容是否相等 可以直接右键 get
(3)clone 创建并返回此对象的一个副本 创建的副本与原对象不在一个内存
2.Scanner类
用于获取用户的键盘输入 构造方法:public Scanner(InputStream source)
System类下有一个静态的字段:public static final InputStream in
“标准”输入流。 该流已经打开,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。
基本格式
(1)hasNextXxx() 判断是否还有下一个输入项
(2)nextXxx() 获取下一个输入项
默认情况下,Scanner使用空格,回车符作为分隔符 nextLine()获取一个String类型的值
容易出现的问题及解决方法:
先获取一个数值,再获取一个字符串,后面的会把回车符\n获取为字符串,及换行符的问题
解决方法:把所有的数都先按照字符串读取,然后要什么再对应的转换成什么
3. String类
字符串是常量
构造方法:
(1)public String(byte[] bytes) :把字节数组转成字符串
(2)public String(byte[] byte,int index,int length) :把字节数组的一部分转成字符串
(3)public String(char[] value) :把字符数组转成字符串
(4)public String(char[] value,int index,int length) :把字符数组的一部分转成字符串
(5)public String(String original) :把字符串常量转成字符串
判断功能
boolean equals(Object obj) :比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符串中是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串内容是否为空
获取功能
int length():获取字符串的长度
char charAt(int index):获取指定索引位置的字符
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引(int类型的原因是'a'和97都可以代表'a')
int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引
int indexOf(int ch, int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引
int indexOf(String str, int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引
String substring(int start):从指定位置开始截取字符串,默认到末尾
String substring(int start,int end):从指定位置开始到指定位置结束截取字符串
转换功能
byte[] getBytes():把字符串转换为字节数组
char[] toCharArray():把字符串转换为字符数组
static String valueOf(char[] chs):把字符数组转换成字符串
static String valueOf(int i):把int类型的数据转成字符串
注:String类的valueOf方法可以把任意类型的数据转换成字符串
String toLowerCase():把字符串转成小写
String toUpperCase():把字符串转成大写
String concat(String str):把字符串拼接
其他功能
String replace(char old,char new):替换功能
String replace(String old,String new)
String trim() :去除字符串两端空格
int compareTo(String str):按字典顺序比较两个字符串
int compareToIgnoreCase(String str)
字符串的方法:public int length():返回字符串的长度
字符串一旦赋值就不能改变,但是s+="world"这种并不属于
String类重写了equals()方法,比较的是内容是否相同
String的转换功能,获取功能,判断功能,替换功能
String作为参数传递,(即便是引用类型)效果和基本类型作为参数传递是一样的
String字面值对象和构造方法创建对象的区别:前者会创建2个对象,后者创建1个对象
实现一个用户名和密码检验功能
import java.util.Scanner;
public class StringTeat {
public static void main(String[] args) {
//定义用户名和密码
String username = "admin";
String password = "admin";
//给三次机会
for(int x=0;x<3;x++) {
//键盘录入用户名和密码
Scanner sc = new Scanner(System.in );
System.out.println("请输入用户名:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String pwd = sc.nextLine();
//比较用户名和密码
if (name.equals(username) && pwd.equals(password)) {
//如果都相同,则登陆成功
System.out.println("登陆成功");
break;
}else {
//如果有一个不同,则登录不成功
//如果是第0次,应该换一种提示
if((2-x) == 0) {
System.out.println("账号被锁定");
}else {
System.out.println("登陆失败,你还有"+(2-x)+"次机会");
}
}
}
}
}
4.StringBuffer类
线程安全的可变字符序列(即字符串),一个类似于String的字符缓冲区,但不能修改
线程安全(多线程讲解):
安全--同步--数据是安全的
不安全--不同步--效率高一点
StringBuffer和String的区别:
(1)前者长度和内容可变,后者不可变
(2)如果使用前者做字符串的拼接,不会浪费太多的资源
StringBuffer的构造方法:
(1)public StringBuffer():无参构造方法
(2)public StringBuffer(int capacity):指定容量的字符串缓冲对象( 容量为理论值,长度为实际值)
(3)public StringBuffer(String str):指定字符串的字符串缓冲区对象
StringBuffer的添加功能:
(1)public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
(2)public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
StringBuffer的删除功能
(1)public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
(2)public StringBuffer delete(int start,int end):删除从指定位置开始,指定位置结束的内容,并返回本身
StringBuffer替换功能
(1)public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
StringBuffer翻转功能
(1)public StringBuffer reverse()
StringBuffer截取功能(返回值是String类型,本身没有发生改变)
(1)public String substring(int start)
(2)public String substring(int start,int end)
StringBuffer把数组拼接成一个字符串
public class StringBufferTest2 {
public static void main(String[] args) {
int[] arr = {44,33,55,11,22};
String s = arrayToString2(arr);
System.out.println("s:"+s);
}
//把数组拼接成一个字符串
public static String arrayToString2(int[] arr) {
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i=0; i<arr.length;i++) {
if (i==arr.length-1) {
sb.append(arr[i]);
}else {
sb.append(arr[i]).append(",");
}
}
sb.append("]");
return sb.toString();
}
}
StringBuffer反转
import java.util.Scanner;
public class StringBufferTest3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据:");
String s = sc.nextLine();
String s1 = myReverse2(s);
System.out.println("s1:"+s1);
}
public static String myReverse2(String s) {
return new StringBuffer(s).reverse().toString();
}
}
判断一个字符串是否是对称的
import java.util.Scanner;
public class StringBufferTest4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
boolean b = isSame(s);
System.out.println("b:"+b);
}
public static boolean isSame(String s) {
return new StringBuffer(s).reverse().toString().equals(s);
}
/*
public static boolean isSame(String s) {
//把字符串转成字符数组
char[] chs = s.toCharArray();
boolean flag = true;
for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
if(chs[start] != chs[end]) {
flag =false;
break;
}
}
return flag;
}
*/
}
String,StringBuffer, StringBuilder的区别:
(1)String内容是不可变的,StringBuffer和StringBuilder内容都是可变的
(2)StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
StringBuffer和数组的区别:
二者都可以看出是一个容器,装其他的数据。但是,StringBuffer的数据是一个字符串数据
而数组可以放置多种数据,但必须是同一种数据类型的