目录
String类的基本概念
String类的实例化方式
String类的实例化方式有两种
1. 直接赋值
public class StringDemo{
public static void main(String args[]){
String str="hello world!";
System.out.println(str);
}
}
程序执行结果:hello world!
2. 利用构造方法实例化
public class StringDemo{
public static void main(String args[]){
String str=new String("hello world!");
System.out.println(str);
}
}
程序执行结果:hello world!
关于两种方法的说明:
1.字符串常量就是String类的匿名对象
public class StringDemo{
public static void main(String args[]){
String str="hello"; //str是对象名称,而"hello"是内容
System.out.println("hello".equals(str)); //由字符串直接调用equals()函数(内容比较函数)
}
}
程序执行结果:true
这个程序最大的特点是直接利用字符串“hello”调用equals()方法,由于equals()方法是String类中定义的,然而类中的方法只有实例化之后才能调用。所以可以说字符串常量是String类的匿名对象。
2.String类采用的是共享设计模式,当代码中使用直接赋值定义一个String类的对象时,会将此字符串对象所使用的匿名对象入池保存,后续如果有其他String类对象使用直接赋值并设置同样内容时,将不会重新开辟新的堆内存空间,而是直接引用。
3.采用构造方法实例化对象(String s=new String(“字符串”)),会开辟两块堆内存空间,其中有一块空间将成为垃圾,并且不会自动入池,但是用户可以使用intern()方法手工入池。
4.字符串一旦定义则不可改变。
String类的常用方法
1.字符与字符串
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String(char[]) value | 构造 | 将字符数组变成String类对象 |
2 | public String(char[] value, int offset, int count) | 构造 | 将部分字符数组变为String |
3 | public char charAt(int index) | 普通 | 返回指定索引对应的字符信息 |
4 | public char[] toCharArray() | 普通 | 将字符串以字符数组的形式返回 |
取出指定索引的字符——使用charAt()方法:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
System.out.println(str.charAt(0));
}
}
程序执行结果:h
字符数组与字符串的转换:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
char[] data=str.toCharArray(); //把字符串变为字符数组
for(int x=0;x<data.length;x++){ //循环输出每个字符
System.out.print(data[x]+"、");
}
}
}
程序执行结果:h、e、l、l、o、w、o、r、l、d、
字符串转换为大写:
public class StringDemo{
public static void main(String args[]){
String str="hello";
char[] data=str.toCharArray();
for(int x=0;x<data.length;x++){
data[x]-=32;
}
System.out.println(String(data)); //将全部字符数组转换为String
System.out.println(String(data,1,2)); //将部分字符数组转换为String
}
}
程序执行结果: HELLO
EL
2.字节与字符串
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String(byte[] bytes) | 构造 | 将全部字节数组变成字符串 |
2 | public String(byte[] bytes, int offset, int length) | 构造 | 将部分字节数组变为字符串 |
3 | public byte[] getBytes() | 普通 | 将字符串变为字节数组 |
4 | public byte[] getBytes(String charsetName) throws UnsupportedEncodingException | 普通 | 进行编码转换(IO操作时用到) |
字符串与字节数组的转换:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
byte[] data=str.getBytes();
for(int x=0;x<data.length;x++){
data[x]-=32;
}
System.out.println(String(data)); //全部转换
System.out.println(String(data,5,5)); //部分转换
}
}
程序执行结果:HELLWORLD
WORLD
3.字符串比较
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public boolean equals(String anObject) | 普通 | 进行相等判断,它区分大小写 |
2 | public boolean equalsIgnoreCase(String anotherString) | 普通 | 进行相等判断,不区分大小写 |
3 | public int compareTo(String anotherString) | 普通 | 判断两个字符串的大小(按照字符编码比较),此方法的返回值有如下三种结果:=0:表示要比较的两个字符串内容相等; >0:表示大于的结果; <0:表示小于的结果; |
相等判断:
public class StringDemo{
public static void main(String args[]){
String str1="hello";
String str2="Hello";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnore(str2));
System.out.println(str1.compareTo(str2));
}
}
程序执行结果:false
true
32
4.字符串查找
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public boolean contains(String s) | 普通 | 判断指定的内容是否存在 |
2 | public int indexOf(String str) | 普通 | 由前向后查找指定字符串的位置,如果查找到了则返回(第一个字母)位置索引,如果找不到返回-1。 |
3 | public int indexOf(String str, int fromIndex) | 普通 | 由指定位置从前向后查找指定字符串的位置,找不到返回-1 |
4 | public int lastIndexOf(String str) | 普通 | 由后向前查找指定字符串的位置,找不到返回-1 |
5 | public int lastIndexOf(String str, int fromIndex) | 普通 | 从指定位置由后向前查找字符串的位置,找不到返回-1。 |
6 | public boolean startsWith(String prefix) | 普通 | 判断是否以指定的字符串开头 |
7 | public boolean startsWith(String prefix, int toffset) | 普通 | 从指定位置开始判断是否以指定的字符串开头 |
8 | public boolean endsWith(String suffix) | 普通 | 判断是否以指定的字符串结尾 |
使用IndexOf()等功能查找:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
System.out.println(str.indexOf("l")); //返回的是第一个查找到的子字符串的位置
System.out.println(str.indexOf("l",5)); //从第6个元素开始查找子字符串位置
System.out.println(str.lastIndexOf("l")); //从后向前查找指定字符串的位置
if(str.indexOf("world")!=-1){
System.out.println("可以查询到world");
}
}
}
程序执行结果:2
8
8
可以查询到world
contains()方法的使用、开头结尾判断:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
String str3="##@@hello**";
if(str.contains("world")){
System.out.println("可以查询到world");
}
//开头、结尾判断
System.out.println(str3.startsWith("##"));
System.out.println(str3.startsWith("@@",2));
System.out.println(str3.endsWith("**"));
}
}
程序执行结果:可以查询到world
true
true
true
5.字符串替换、截取
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String replaceAll(String regex, String replacement) | 普通 | 用新的内容替换掉全部旧的内容 |
2 | public String replaceFirst(String regex, String replacement) | 普通 | 替换首个满足条件的内容 |
3 | public String substring(int beginIndex) | 普通 | 从指定索引截取到结尾 |
4 | public String substring(int beginIndex, int endIndex) | 普通 | 截取部分子字符串的数据 |
字符串替换:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
String result1=str.replaceAll("l","_"); //全部替换
String result2=str.replaceFirst("l","_"); //部分替换
System.out.println(result1);
System.out.println(result2);
}
}
程序执行结果:he__oworld
he_loworld
字符串截取:
public class StringDemo{
public static void main(String args[]){
String str="helloworld";
String result1=str.substring(5); //从指定索引截取到结尾
String result2=str.sunstring(0,5); //截取部分子字符串
System.out.println(result1);
System.out.println(result2);
}
}
程序执行结果:world
hello
6.字符串拆分
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String[] split(String regex) | 普通 | 按照指定的字符串进行全部拆分 |
2 | public String[] split(String regex, int limit) | 普通 | 按照指定的字符串进行部分拆分,最后的数组长度就是由limit决定(如果能拆分的结果很多,数组长度才会由limit决定),即:前面拆,后面不拆 |
全部拆分:
public class StringDemo{
public static void main(String args[]){
String str="hello world nihao scdn";
String[] data=str.split(" ");
for(int x=0;x<data.length;x++){
System.out.println(data[x]+"、");
}
}
}
程序执行结果:hello、world、nihao、csdn
指定个数拆分:
public class StringDemo{
public static void main(String args[]){
String str="hello world nihao scdn";
String[] data=str.split(" ",2);
for(int x=0;x<data.length;x++){
System.out.println(data[x]);
}
}
}
程序执行结果:hello
world nihao csdn
复杂拆分:
public class StringDemo{
public static void main(String args[]){
String str="戴风:20|沈哲:21|韩商言:22";
String[] data=str.split("\\|"); //正则表达式影响,使用\\进行转义
for(int x=0;x<data.length;x++){
String[] temp=data[x].split(":");
System.out.println("姓名:"+temp[0]+",年龄:"+temp[1]);
}
}
}
程序运行结果:姓名:戴风,年龄:20
姓名:沈哲,年龄:21
姓名:韩商言,年龄:22
7.String类中的其他方法
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public String concat(String str) | 普通 | 字符串连接,与“+”类似 |
2 | public String toLowerCase() | 普通 | 转小写 |
3 | public String toUpperCase() | 普通 | 转大写 |
4 | public String trim() | 普通 | 去掉字符串中左右两表的空格,中间空格保留 |
5 | public int length() | 普通 | 取得字符串的长度 |
6 | public String intern() | 普通 | 数据入池 |
7 | public boolean isEmpty() | 普通 | 判断是否是空字符串(不是null,而是"",长度0) |
关于这些其他方法我就不再多做解释,举一例子说明。
举例:
public class StringDemo{
public static void main(String args[]){
String str=" HEl lo ";
System.out.println(str.toLowerCase()); //转小写
System.out.println(str.toUpperCase()); //转大写
System.out.println("["+str+"]"); //原字符串
System.out.println("["+str.trim()+"]"); //去掉空格的字符串
System.out.println("字符串的长度为:"+str.length());
}
}
程序运行结果: hel lo
HEL LO
[ HEl lo ]
[HEl lo]
字符串的长度为:10
以上内容为自己学习过程中的一些见解,欢迎大家留言指正,如果这些内容对你有所帮助请添加关注,后续还有其他内容奉上。