String类详解
⼀、基本内容:
1.String类:即字符串类,其主要构造⽅法为:
String(String Original),把字符串封装成字符串对象;
举例:String s1 = new String(“hello”);
String(char[] value),把字符数组的数据封装成字符串对象;
举例:char[] chs = {‘h’,‘e’,‘l’,‘l’,‘o’};
String s2 = new String(chs);
String(char[] value,int index, int count),从索引index开始把count个字符数组值封装成字符串对象。
举例:char[] chs = {‘h’,‘e’,‘l’,‘l’,‘o’};
String s3 = new String(chs,1,3);
最为简单的⼀种⽅法是直接构造法:
举例:String s4 = “hello”;
3.String类的判断功能:
Object类:是类层次结构的根类,所有的类都直接或者间接继承⾃Object类;
如果⼀个⽅法的形参是Object,那么这⾥我们就可以传递Object类的任意⼦类对象;
boolean equals(Object obj):⽐较字符串的内容是否相同(区分⼤⼩写);
boolean equalsIgnoreCase(String str):⽐较字符串的内容是否相同(忽略⼤⼩写);
boolean startsWith(String str):判断字符对象是否以指定的str开头;
boolean endsWith(String str):判断字符对象是否以指定的str结尾;
4.String类运⽤举例(模拟⽤户登录):
public class UserLogin {
public static void main(String [] args) {
String username = "hxf1688";
String password = "2e5y8hxf";
for(int i=0; i < 3; i++) {
Scanner sc = new Scanner(System.in); //创建sc为输⼊类 System.out.println("请输⼊⽤户名:");
String user = sc.nextLine();
System.out.println("请输⼊密码:");
String psw = sc.nextLine();
if(username.equals(user)&&password.equals(psw)) {
System.out.println("登录成功");
break;
}
else {
if(i==2) {
System.out.println("您输⼊错误次数过多,请联系管理员"); }
else {
System.out.println("输⼊失败,您还有"+(2-i)+"尝试机会"); }
}
}
}
}
Scanner类:
nextLine()⽅法:
5.String类的获取功能:
int length():获取字符串的长度,也即字符个数;
char charAt(int index):获取指定索引处的字符;
int indexOf(String str):获取字符串str在字符串对象中出现的位置索引,返回str的第⼀个字符的索引位置;
String substring(int start):从索引start处开始截取字符串,⼀直到结尾;
String substring(int start, int end):从索引start(包括start)开始截取字符串,到end(不包括end)结束。
6.字符串的遍历:
for(int i=0; i < str.length() ;i++){ //注意这⾥使⽤的是str.length(),这是String类中的⽅法,若str为数组,则使⽤str.length,这⾥的length为属性
System.out.println(i);
}
7.统计字符串中⼤写字符、⼩写字符、数字字符的个数:
由于英⽂字母不论⼤⼩写和数字,从⼩到⼤都有⼀定顺序,⽐如统计⼤写字符,只需判断:ch >= ‘A’ && ch <= ‘Z’,即可。
8.String类的转换功能(将String类转换为字符数组、⼤⼩写的转换):
char[] toCharArray(): 把字符串转换为字符数组;
String toLowerCase(): 把字符串转换为⼩写字符;
String toUpperCase():把字符串转换为⼤写字符;
练习:将输⼊的字符串⾸字母⼤写,其余为⼩写!
解题思路:利⽤字符串截取的⽅法substring(int start, int end),将⾸字母与其余字母分别截取到两个字符串中,再将两个字符串拼接。
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
s1 = substring(0,1);
s2 = substring(1);
s3 = s1 + s2;
9.String类的去空格和按照指定符号分割功能:
String trim(): 去除字符串两端空格;
String[] split(String str): 按照指定符号分割字符串;
举例:
String s1 = "aa,bb,cc";
String[] ArrayStr = s1.split("bb");
for(int i=0; i < ArrayStr.length; i++) {
System.out.println(ArrayStr[i]);
}
结果:
aa,
,cc
10.字符串的反转:
例如:输⼊abc,输出cba;
解法⼀:将字符串倒着遍历,再将得到的字符拼接成字符串;
解法⼆:把字符串转换为字符数组,再将字符数组进⾏反转,再将字符数组转换成字符串;
public static String reverse(String s){ //解法⼀倒着遍历法
String ss = "";
for(int x = length-1; x > 0; x--){
ss += charAt(x);
}
return ss;
}
public static String reverse(String s){
char[] str = s.toCharArray(); //将字符串转换成字符数组
for(int start = 0,int end = length - 1; start <= end ; start++, end--){ //逐个进⾏⾸尾交换
char temp = str[start];
str[start] = str[end];
str[end] = temp;
}
String ss = new String(str); //通过创建对象的⽅式把字符数组转换成字符串
return ss;
}
11.数组元素按指⽰格式拼接:
举例:输⼊:int [] = {1,2,3}; 输出:[1,2,3]
public static String arrayToString(int[] arr){
String s = "";
s += '['; //这⾥的s += '['也可以使⽤s += "[",单引号和双引号均可
for(int x=0; x < arr.length; x++){数组转换成字符串
if(x == arr.length - 1){
s += arr[x];
}
else {
s += arr[x]; //字符串拼接也可以将int型数据拼接成字符串;
s += ", ";
}
}
s += ']';
return s;
}
12.StringBuilder类的概述:
(1)虚拟机⾓度描述:⾸先,我们实例化⼀个String类的字符串对象s,让其存储字符串“hello”,这时s存储的是“hello”的地址(假设在常量池中的地址为001),这时我们运⾏代码s += “world”,此时“world”会存储在常量池中的地址为002,⽽字符
串“helloworld”则会存储在常量池中的地址003中,并且此时对象s存储的地址为003,即“helloworld”的地址,⽽此时001和002地址中的常量就浪费了,使⽤StringBuilder类可以避免拼接字符串时造成的资源浪费这个问题。
(2)StringBuilder类基本属性描述:
String类与StringBuilder类的区别:String类的内容是固定的,StringBuilder类的内容是可变的。
构造⽅法:
StringBuilder() : 构造⼀个不带任何字符的字符串⽣成器,其初始容量为 16 个字符。
StringBuilder(String str) : 构造⼀个字符串⽣成器,并初始化为指定的字符串内容,这⾥如果⼊参为“helloworld”,则其容量变为16+10 = 26。
成员⽅法:
public int capacity():返回当前容量。
public int length():返回长度(字符数)。
注意:容量为理论值,长度为实际值。
(3)StringBuilder类的添加⽅法和反转⽅法:
添加⽅法: public StringBuilder append(任意类型)
StringBuilder s1 = StringBuilder(hello);
s2 = s1.append("world");
(s1 == s2) //结果为true
说明s1的内容是可变的,s1和s2指向同⼀⽚地址,该地址存储的内容是可变的,从hello变成“helloword”.
另外,append可以将任意类型的值变为字符串:
s1.append("hello");
s1.append("world");
s1.append(true);
s1.append(100);
//输出结果为:helloworldtrue100
s1.append("hello").append("world").append(true).append(100); //链式编程
//因为append返回的是StringBuilder对象,所以可以连续调⽤append成员⽅法,输出结果和上⾯⼀样。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论