前言:
String类作为Java代码以及面试题中经常使用到的一个工具类,其重要性不言而喻,下面,作者将通过解读并举例Java官方文档中的String类带领读者学习/复习,本文的重点在于熟悉此类操作/使用,可能会照顾不到一些细节问题,需要的读者可以自取官方文档查阅,在线文档:String (Java Platform SE 8 ) (oracle.com)。
String类:
一,简介:
String 是 Java.lang 包中的一个类,该类的特点是String类的对象具有不可分割性,一旦对象被创建之后,无法对其值进行修改,任何类似于修改其值的行为都是将修改的值复制到新的对象中,另外该类还有一些常见的使用途径:
public static void main(String[] args) {
String str1 = "我是str1";
String str2 = "我是str2";
//打印操作
System.out.println(str1);
//使用【+】拼接字符串
System.out.println(str1+str2);
//获取子字符串
System.out.println(str1.substring(2, 5));
}
运行结果:
String类还有许多方法,包括:字符串对比,查找字符串,获取子字符串,复制字符串,转换字符串中字母大小写格式等。
二,构造方法:
//构造方法
//使用第一种构造方法会得到一个空对象,使用第二种构造方法会将旧的str1的值拷贝到新的对象
//里面,由于str1为空,故str2也为空
String str1 = new String();
String str2 = new String(str1);
//类似的 可以在new String() 中填入一个字节数组或者字符数组 此处需要注意需要将数组初
//始化才能填入
byte[] bytes = {1,2,3,4,5};
char[] chars = {5,6,7,8,9};
String str3 = new String();
String str4 = new String(chars);
//另外new String() 中还可以填入 StringBuffer 或者 StringBuilder 对象
String str5 = new String(new StringBuffer());
String str6 = new String(new StringBuilder());
此外,如果想将其他类型的数组转化为字符串可以通过 StringBuilder 或 StringBuffer 将数组内容拼接为字符串:
//将以下数组转化为字符串
int[] arr = {1,2,3,4,5};
//使用 StringBuffer 拼接数组
StringBuffer stringBuffer = new StringBuffer();
for(int i = 0; i < arr.length; i++) {
stringBuffer.append(arr[i]);
}
//将stringBuffer构造为字符串
String str7 = new String(stringBuffer);
//打印结果
System.out.println(str7);
运行结果:
三,常见方法分类:
1,字符串属性
该分类希望将无与参与字符串值修改,与字符串外属性的相关方法分开,建立起更加完整的使用框架。
1.1 字符串的长度
String str8 = "abcda";
System.out.println(str8.length());
运行结果:
1.2 字符的编码方式
默认使用utf8字符集进行编码,我们也可以由此来获取某个字符串中某个位置的字符,与获取字符相关的方法都已 code 开头,如果是使用idea进行编写代码的伙伴就能轻松看到相关类了。以熟悉的字母 a 为例:
String str9 = "123456a";
System.out.println(str9.codePointAt(6));
运行结果:
1.3 字符串与其他类的转换
String中提供了String类向 byte[ ],char[ ] 等数组的转换,分别是
String str10 = "hello have a good day !!!";
//将以下数组转化为字符串
byte[] bytes = str10.getBytes();
char[] chars = str10.toCharArray();
//使用 StringBuffer 拼接数组
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = new StringBuffer();
for(int i = 0; i < bytes.length; i++) {
stringBuffer.append(bytes[i]);
}
for(int j = 0; j < chars.length; j++) {
stringBuffer1.append(chars[j]);
}
//将stringBuffer构造为字符串
String str7 = new String(stringBuffer);
String str8 = new String(stringBuffer1);
//打印结果
System.out.println(str7);
System.out.println(str8);
运行结果:
1.4 字符串的拷贝
在介绍本个知识点之前我们需要知道为啥需要拷贝这个操作,以下是两点理由,一,拷贝其实是创建一个新的实例,我们知道,一个对象能存在的前提条件是有引用指向它,那么在这个前提下,拷贝所起到的一个作用是为被拷贝对象建立一个起另外一个生命周期。二,由于 String 类对象即字符串类似于数组,在内存中也占据一段连续的空间,因此如果想要对该类对象进行删改操作就需要执行拷贝操作。
拷贝操作之前有提到过,可以直接将对象放到新对象的构造的返回法中:
String str11 = "hello !";
String str12 = new String(str11);
2,字符串的值及搜索
一个非空字符串可以看作是某一个集合(不限于数字,字母,及其其他字符),因此就会涉及到对这个合集元素的查找,分类,查找的过程本质上也涉及两个字符合集之间的比较
2.1 字符的获取
单个字符的的获取(根据元素下标):
//获取str12中最后一个字母o
String str12 = "hello";
System.out.println(str12.charAt(4));
2.2 字符的查找
是否包含字符的判断:
String str13 = "hahahahahaha!";
System.out.println(str13.contains("c"));
System.out.println(str13.contains("ha"));
System.out.println(str13.contains("!"));
运行结果:
获取目标字符的下标:
在使用这些方法的时候要注意所要求的传入参数是码值还是字符,以下以第一个方法为例:
String str14 = "hello Java";
System.out.println(str14.indexOf(97));
以上是本文的全部内容,希望读者可以通过阅读官方文档完善或建立一个更加合理的知识架构,合理的架构本身就是对String类或字符串属性的深层挖掘。