API
API即应用程序编程接口,英文全称Application Programming Interface。
API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
字符串是API的一种。
String
1 String简述
String类
在java.lang
包下,不需要导包
String类代表字符串,Java程序中所有的双引号字符串
,都是String类的对象
特点:
- 值在被创建后不能再改变
- 可以被共享
- 效果上相当于字符数组(
char[]
),底层原理是字节数组(byte[]
)
如果想修改字符串内容:
- 可以用
subString()
方法截取再重新拼接 - 可以用
toCharArray()
方法将字符串变成字符数组,修改后再new String(char[] chs)
变回字符串
2 创建对象
方法 | 说明 |
---|---|
直接赋值 | 如 String s = “abc”; |
public String() | 创建一个空白字符串对象 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
2.1 直接赋值
会复用字符串常量池里的字符串,节约内存且易写。
new出来的字符串不会复用,会开辟一个新空间。
String s4 = "abc";
// 输出: s4 = abc
2.2 构造方法
- public
String()
; //创建一个空白字符串对象
String s1 = new String();
// 输出: s1 = (空白)
- public
String(char[] chs)
; //根据字符数组的内容,来创建字符串对象
char[] chs = {'a' , 'b' , 'c'};
String s2 = new String(chs);
// 输出: s2 = abc
- public
String(byte[] bys)
; //根据字节数组的内容,来创建字符串对象
byte[] bys = {97 , 98 , 99};
// ASCLL:a在计算机中存储的是97这个值
String s3 = new String(bys);
// 输出: s3 = abc
3 常用成员方法
方法 | 说明 |
---|---|
boolean equals() | 比较数据值,且数据值必须完全相同 |
boolean equalsIgnoreCase() | 比较数据值,忽略英文字母大小写 |
char charAt(int index) | 获取字符串上index索引处的字符 |
int length() | 获取字符串的长度 |
String substring(int beg, int end) | 截取下标[beg, end)区间内的元素 |
String substring(int beg) | 截取下标beg到末尾 |
String[] split(String regex) | 按regex将字符串分段,并返回一个数组 |
String replace(char oldChar, char newChar) | 将字符串中的oldChar字符替换成newChar |
4 常见操作
4.1 比较
==
比较地址值 ( == 比较引用数据类型是比较的地址值)equals()
比较数据值,且数据值必须完全相同equalsIgnoreCase()
比较数据值,忽略英文字母大小写
public class StringDemo1 {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = "abc";
String s3 = "Abc";
boolean result = (s1 == s2);
System.out.println(result); //false
result = s1.equals(s2);
System.out.println(result); //true
result = s1.equals(s3);
System.out.println(result); //false
result = s1.equalsIgnoreCase(s3);
System.out.println(result); //true
}
}
4.2 遍历
方法:
int length()
//获取字符串的长度
char charAt(int index)
//获取字符串上index索引处的字符
public class StringDemo2 {
public static void main(String[] args) {
String s = "absc124xc";
//1.获取字符串的长度
for (int i = 0; i < s.length(); i++) {
//2.获取字符串的每一个字符
char c = s.charAt(i);
System.out.print(c + ", ");
}
}
}
4.3 拼接
注意:
如果没有变量参与,编译之后(.class文件)就生成了拼接后的结果,会复用串池中的字符串;
如果有变量参与,每一次的拼接,都会在内存中创建新的字符串对象,浪费内存。
String s = "hello"; // 假设:生成地址 001
s += "world";
/*
字符串world生成地址002
s += 操作又会生成地址003
*/
Sout: s; //此时的s的地址是003
// 输出: helloworld
4.4 截取
方法:
String substring(int beg, int end)
//截取下标[beg, end)区间内的元素
String substring(int beg)
//截取下标beg到末尾
String[] split(String regex)
//按regex将字符串分段,并返回一个数组
该操作对原字符串没有任何影响,因为字符串不能发生变化
案例1: 将手机号部分密文输出
public class stringDemo7 {
public static void main(String[] args) {
String phoneNumber = "14515451297";
//1.截取
String start = phoneNumber.substring(0, 3);
String end = phoneNumber.substring(7);
//2.拼接
String result = start + "****" + end;
System.out.println(result); //145****1297
}
}
案例2: 从字符串"张三-19"中截取年龄
public class StringDemo8 {
public static void main(String[] args) {
String s = "张三-19";
String[] split = s.split("-");
//获取1号索引处元素
System.out.println(split[1]); //19
}
}
4.5 替换
方法:
String replace(char oldChar, char newChar)
//将字符串中的oldChar字符替换成newChar
案例: 替换敏感词汇
//字符串替换
public class stringDemo9 {
public static void main(String[] args) {
//敏感词库
String[] arr = {"NMD", "CNM", "TMD"};
//获取发送的文字
String talk = "你TMD玩的真好,CNM";
//替换
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i], "***");
}
System.out.println(talk); //你***玩的真好,***
}
}