API&字符串
一、什么是API
API(Application Programming Interface):应用程序编程接口
java提供了API和API帮助文档,帮助程序员更好的理解和使用api
二、常用字符串类
String,StringBuilder,StringJoiner,StringBuffer,Pattern,Matcher
1.String
String的注意点:
1.字符串的内容是不会发生变化的,它的对象在创建后不能被更改,当想要改变时会产生一个新的字符串
创建String对象的两种方法:
1.直接赋值
String s1 = "abc";
System.out.println(s1);
2.new(空参,传入字符串,字符数组,字节数组都可以)
//空参
String s2 = new String(); // ""
System.out.println("1" + s2 + "2");
//字符串
String s3 = new String("abc");
System.out.println(s3);
//*字符数组
char[] chs = {'a', 'b', 'c', 'd'}; //当你需要修改字符串时,可以转为字符数组再修改
String s4 = new String(chs);
System.out.println(s4);
//*字节数组
byte[] bytes = {97,98,99,100};
String s5 = new String(bytes); //可以将byte字节转为ascii码
System.out.println(s5);
字符串的比较:
当new创建字符串时,指向堆中内存地址,直接赋值时指向StringTable中地址
==在比较基本数据类型时,比的是内存中的数据值,但在比较引用数据类型时,比较为地址值
所以这两种字符串不能直接比较,结果一定是false
需要比较字符串时,要调用.equals();
键盘录入得到的字符串是new产生的,所以不能直接==比较
if(s4 == s5) {// 比较地址值
System.out.println(true);
}else{
System.out.println(false);
};
boolean ans = s4.equals(s5);// 比较的内容
System.out.println(ans);
// 比较内容是否相等(不考虑大小写)
String s6 = "ABCD";
ans = s4.equalsIgnoreCase(s6);
System.out.println(ans);
案例:用户登录
//------------------------------------------案例一、用户登录--------------------------------------------
/* 需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应提示*/
//定义两个变量,记录正确的用户名和密码
String rightUsername = "zhangsan";
String rightPassword = "123456";
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3;i++) {
//键盘输入账号密码
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//比较用户名和密码
if (isRight(rightUsername,rightPassword,username,password)){
System.out.println("登录成功!");
break;
}else{
System.out.println("用户名或密码错误!");
if (i == 2){
System.out.println("您已尝试错误三次,登录失败!");
break;
}else{
System.out.printf("您还可以尝试%d次!",(2 - i));
}
}
}
字符串的遍历:
//遍历字符串:
System.out.println("请输入需要遍历的字符串");
String s7 = sc.next();
for (int i1 = 0; i1 < s7.length(); i1++) {
System.out.println(s7.charAt(i1));
}
字符串的拼接:
//拼接字符串:
int[] arr = {1,2,3,4,5,6,7,8,9};
System.out.println(printArrDef(arr));
System.out.println(printArrDef2(arr));
System.out.println(printArrDef3(arr));
字符串的翻转:
//翻转字符串:
System.out.println(filpString("Abcfge"));
字符串的截取:
//*截取字符串:
System.out.println("ABCDEFGHIJKLMN".substring(2,7));//"CDEFG",包左不包右,不包含起始位置
字符串内替换:
//字符串内替换:
System.out.println("不会打可以别打,TMD,又菜又爱玩,TMD".replace("TMD","***"));
2.StringBuilder
StringBuilder可以看做是一个容器,创建之后里面的内容是可以修改的
可以用来提高字符串的操作效率以及减小内存占用
可以空参构造也可以用字符串参数构造
方法:
方法名 | 作用 |
append(任意类型数据) | 添加数据,返回容器本身 |
reverse() | 翻转容器中的内容 |
length() | 返回长度,也就是字符个数 |
toString() | 可以将容器转为String类型返回 |
3.StringJoiner
构造函数:
1.StringJoiner(间隔符)
2.StringJoiner(间隔符,开始符号,结束符号)
总结:
1.String
表示字符串类,定义了很多操作字符串的方法
2.StringBuilder
一个可变的操作字符串的容器。
可以高效的拼接字符串,还可以将容器里面的内容反转。
3.StringJoiner
JDK8出现的一个可变的操作字符串的容器,可以高效,方便的拼接字符串。
在拼接的时候,可以指定间隔符号,开始符号,结束符号。
案例:
public static String printArrDef(int[] arr){// 使用普通方法,处理大量字符串时,过度占用内存
//拼接字符串:
//要求:定义一个int数组[1,2,3],要求方法执行后输出为"[1,2,3]"
if(arr == null){
return "";
}else if(arr.length == 0){
return "[]";
}else{
String result = "[";
for (int i = 0; i < arr.length; i++) {
result = result + arr[i];
if (i != arr.length - 1){
result += ",";
}
}
result += "]";
return result;
}
}
public static String printArrDef2(int[] arr){// 使用StringBuilder,减小内存占用同时加快处理速度
StringBuilder sb = new StringBuilder();
if(arr == null){
return "";
}else if(arr.length == 0){
return "[]";
}else{
sb.append("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
if (i != arr.length - 1){
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
public static String printArrDef3(int[] arr){// 使用Stringjoiner,进一步优化代码
StringJoiner sj = new StringJoiner(",","[","]");
if(arr == null){
return "";
}else if(arr.length == 0){
return "[]";
}else{
for (int i = 0; i < arr.length; i++) {
sj.add(arr[i] + "");
}
return sj.toString();
}
}
public static String filpString(String str){
String result = "";
for (int i = str.length() - 1; i >= 0; i--) {
result = result + str.charAt(i);
}
return result;
}