1.String类
String类代表的是一个字符串,字符串对象在开发中是最常见的.为了方便我们对象字符串的操作,java就把字符串用对象进行了封装,这个封装类就是String类.
String str=new String("hello");创建了两个对象,常量池中的"hello"和new String()对象
String(byte[] bytes) byte数组转换为其对应的ASCII码字符串
String(byte[] bytes,int offset,int length) 从索引offset开始截取字符串,长度为length
String(char[] value) 字符数组转换为字符串
String(char[] value,int offset,int count) 从offset开始截取字符串,长度为count
注意:字符串直接赋值地址指向常量池,字符串里有重写的equals方法,用于比较两个字符串内容是否相同,==在比较基本数据类型时是比较两者是否相等,在比较引用类型数据时是比较两者地址值是否相同.
String s1 = "hello";
String s2 = "hello";
System.out.println("s1.equals(s2):" +s1.equals(s2));//true
System.out.println("s1==s2:" + (s1 == s2));//true
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("s3.equals(s4):" + s3.equals(s4));//true
System.out.println("s3==s4:" + (s3 == s4));//false
System.out.println("s1.equals(s3):" + s1.equals(s3));//true
System.out.println("s1==s3:" + (s1 == s3));//false
2.字符串的常用功能
字符串的判断功能
boolean equals(Object obj):重写了Object类的equals方法,比较字符串的值是否相同
boolean equalsIgnoreCase(String str):不区分大小写比较字符串是否相同
boolean contains(String str):判断大的字符串里面是否包含小的字符串
boolean startsWith(String str):判断字符串是否以指定的字符串开始
boolean endsWith(String str):判断字符串是否以指定字符串结尾
boolean isEmpty():判断字符串是否为空
/*
* 需求:模拟用户登录,给三次机会, 每次错误后,提示剩余机会
* 思路:1.定义键盘输入功能
* 2.判断是否与账户密码相同,账户为admin,密码为admin
*/
import java.util.Scanner;
public class LianXi {
public static void main(String[] args) {
// 定义键盘输入功能
Scanner sc = new Scanner(System.in);
// 定义判断功能
for (int x = 0; x < 3; x++) {
// 输入用户名和密码
System.out.println("请输入用户名:");
String useword = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
if ("admin".equals(password) && "admin".equals(useword)) {
System.out.println("登陆成功!");
break;
} else {
if (x != 2) {
System.out.println("登录失败,剩余" + (2 - x) + "次机会");
} else {
System.out.println("登录失败!");
}
}
}
}
}
字符串类的获取功能
int length():获取字符串中字符的个数
char charAt(int index):获取指定索引处的字符
int indexOf(int ch):查找字符在字符串中第一次出现的索引
int indexOf(String str):查找小字符串在大字符串中第一次出现的索引
int indexOf(int ch,int fromIndex):从指定位置开始,查找字符在字符串中第一次出现的索引
int indexOf(String str,int fromIndex):从指定位置开始,查找字符串在大字符串中第一次出现的索引
String substring(int start):截取字符串,默认截取到结尾
String substring(int start,int end):根据起始位置和结束位置截取字符串,截取包括start位置,不包括end位置
/*需求:统计一个字符串中大写字母,小写字母,以及数字的个数。
* 思路:
* 1:接受键盘录入一个字符串。
* 2:获取每个字符进行判断
* 3:可以根据对应的ASCII码值进行比较,确定字符类型
*/
import java.util.Scanner;
public class Lianxi {
public static void main(String[] args) {
//定义键盘输入功能
Scanner sc=new Scanner(System.in);
//输入字符串
System.out.println("请输入字符串:");
//接收字符串
String str=sc.nextLine();
//定义计数器
int big=0;
int num=0;
int small=0;
//遍历字符判断类型
for(int x=0;x<str.length();x++){
char ch=str.charAt(x);
if(ch>='a'&&ch<='z'){
small++;
}
else if(ch>='A'&&ch<='Z'){
big++;
}
else{
num++;
}
}
System.out.println("大写字母个数:"+big);
System.out.println("小写字母个数:"+small);
System.out.println("数字个数:"+num);
}
}
字符串的转换功能
byte[] getBytes():把字符串转换成字节数组
char[] toCharArray():把字符串转换成字符数组
static String copyValueOf(char[] chs):把字符串数组转换成字符串
static String valueOf(char[] chs):把字符数组转成字符串
static String valueOf(int i):把字符数组转成字符串
String toLowerCase():把字符串转换成小写
String toUpperCase():把字符串转换成大写
String concat(String str):连接两个字符串
/*
* 需求:获取键盘录入的字符串,请把这个字符串的首字母改为大写,其他的字母小写。
*
* 思路:
* 1.键盘录入字符串
* 2.截取字符串的第一个字母及之后的字符串
* 3.转换首字母并连接字符串
*/
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// 封装键盘录入字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.nextLine();
// 截取字符串
String str1 = str.substring(0, 1);
String str2 = str.substring(1, str.length());
// 转换大小写
String str3 = str1.toUpperCase();
// 连接字符串
String str4 = str3.concat(str2);
System.out.println("str4=" + str4);
}
}
String的其他功能
替换:
String replace(char old,char new)替换一个字符
String replace(String old,String new)替换一个字符串
切割:
String[] split(String regex)
去除字符串两端空格:
String trim()
按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str) 忽略大写小比较字符串
/*
* 需求:对字符串中字符进行自然顺序排序:"basckd",结果是:"abcdks"
*
* 思路:
* 1.把字符串转换成字符数组
* 2.把字符数组排序
* 3.把字符数组转换成字符串
*/
public class Demo {
public static void main(String[] args) {
// 输入字符串
String str1 = "basckd";
// 转换成字符数组
char[] chs = str1.toCharArray();
// 定义排序功能,选择排序
selectSort(chs);
// 将字符数组转换成字符串
String str2 = String.valueOf(chs);
System.out.println(str2);
}
private static void selectSort(char[] chs) {
for (int x = 0; x < chs.length - 1; x++) {
for (int y = x + 1; y < chs.length; y++) {
if (chs[x] > chs[y]) {
char temp = chs[x];
chs[x] = chs[y];
chs[y] = temp;
}
}
}
}
}
3.StringBuffer类
特点:长度可变,可以存储不同类型数据,可以对字符串进行修改,最终要转成字符串进行使用。
StringBuffer类的添加功能
StringBuffer append(data):添加元素
StringBuffer indert(index,data):在指定位置添加元素
StringBuffer类的删除功能
StringBuffer delete(int start, int end) 删除指定范围内的字 符串
StringBuffer deleteCharAt(int index)删除指定位置的字符
StringBuffer类的查找功能
char charAt(index)查找指定位置的字符
int indexOf(String)查找字符串所在的索引
int lastIndexOf(String)查找字符串最后出现的索引
StringBuffer类的修改功能
void setCharAt(int index, char ch):替换指定位置的字符
StringBuffer replace(int start, int end, String str):替换 指定范围内的字符串
String substring(int start):从指定位置截取到末尾
String substring(int start, int end):截取指定范围内的字符串
StringBuffer reverse():反转
StringBuffer的其他功能
String转成StringBuffer的两种方法:
String str=”hello”;
1.StringBuffer sb=new StringBuffer(str);
2.StringBuffer sb=new StringBuffer();
sb.append(str);
StringBuffer转换成String:String str2=sb.toString();
StringBuffer与StringBuilder的区别:StringBuffer是线程安全的,效率低;StringBuilder是线程不安全的,效率高
/*
* 将一个int数组变成字符串
* 思路:1.建立StringBuilder对象
* 2.调用append方法添加
* 3.返回字符串
*/
public class Lianxi {
public static void main(String[] args) {
int[] arr = { 3, 7, 9, 0, 5 };
String str = arrayToString(arr);
System.out.println(str);
}
private static String arrayToString(int[] arr) {
// 建立StringBuilder对象
StringBuilder sb = new StringBuilder();
// 遍历数组,添加字符串
sb.append("[");
for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1) {
sb.append(arr[x] + ",");
} else {
sb.append(arr[x] + "]");
}
}
return sb.toString();
}
}