string类和stringbuffer类都是Java编程语言中常用的字符串处理类。
string类是不可变的字符串类,也就是说,一旦创建了一个字符串对象,就不能对其进行修改。如果需要对字符串进行修改,就需要创建一个新的字符串对象。由于string类是不可变的,因此在多线程环境下使用它是安全的。
stringbuffer类是可变的字符串类,也就是说,可以对其进行修改。如果需要对字符串进行频繁的修改,就应该使用stringbuffer类。由于stringbuffer类是可变的,因此在多线程环境下使用它需要进行同步处理,以确保线程安全。
文章目录
一、String类
Java中每一个字符串都是一个对象,该对象就可以调用String类中的方法,来实现不同的行为。
1.构造方法
| 方法 | Value |
|---|---|
| String() | 无参构造 |
| String(byte[] bytes) | 把字节数组转换成字符串 |
| String(byte[],int offset,int length) | 把字节数组的一部分转换成字符串 |
| String(char[] value) | 把字符数组转换成字符串 |
| String(char[] value,int offset,int count) | 把字符数组的一部分转换成字符串 |
| String(String original) | 把字符串常量转换成字符串 |
/**
* 练习:
* 随机生成一个5位的英文字母验证码(大小写混搭)
* 然后将该验证码输出给用户,然后要求用户输入该验证码,大小写不限制。
* 然后判定用户输入的验证码是否有效(无论用户输入大小写,只要字母都正确即可)。
* @author Admin
*
*
*
可以使用String类的构造函数将char数组转换为字符串,例如:
char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = new String(charArray);
System.out.println(str); // 输出:Hello
我之前试图利用toString方法将字符数组转为字符串这个是不行的
*/
public class Text {
public static void main(String[] args) {
char[] cha = Captcha();
String sa = new String(cha);//这里直接利用构造方法来接收字符数组,转化为字符串
Scanner in = new Scanner(System.in);
System.out.println("输入验证码:");
String str = in.nextLine();
if(sa.equalsIgnoreCase(str)) {
System.out.println("正确");
}else {
System.out.println("重新输入");
}
}
public static char[] Captcha() {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] ch = str.toCharArray();
char[] cp = new char[5];
for(int i=0;i<5;i++) {
// System.out.println((int)(Math.random()*str.length()));
cp[i] = ch[(int)(Math.random()*str.length())];
System.out.println(cp[i]);
}
return cp;
}
}
2.常用方法
| 方法名 | 描述 |
|---|---|
| int length() | 返回字符串的长度 |
| char charAt(int index) | 根据下标获取字符 |
| int indexOf(String str) | 查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1 |
| int indexOf(int ch,int fromIndex) | 查找指定字符在指定位置后第一次出现处的索引 |
| int indexOf(String str,int fromIndex) | 查找指定字符串在指定位置后第一次出现处的索引 |
| char[] toCharArray() | 将字符串转换成字符数组。 |
| byte[] getBytes() | 把字符串转换为字节数组 |
| static String valueOf(…) | String类的valueOf方法可以把任意类型的数据转换为字符串 |
| String trim() | 去掉字符串前后的空格 |
| String toLowerCase() | 把字符串转换为小写 |
| String toUpperCase() | 把字符串转换为大写 |
| String replace(String oldString,String newString) | 把字符串中的子字符串替换为新的子字符串,原字符串不变 |
| String[] split(String str) | 使用给定的正则表达式来拆分当前字符串,并将拆分后的内容以字符串数组的形式返回 |
| String concat(String str) | 把字符串进行拼接 |
| String subString(int beginIndex,int endIndex) | 在字符串中截取出一个子字符串,范围(beginIndex,endIndex),包含开始,不含结束 |
| boolean equals(Object obj) | 比较字符串的内容是否相同,区分大小写 |
| boolean equalsIgnoreCase(String str) | 比较字符串的内容是否相同,忽略大小写 |
| int compareTo(String str) | 按字典顺序比较两个字符串 |
| boolean contains(String str) | 判断当前字符串中是否包含str |
| boolean startsWith(String str) | 判断字符串是否以某个指定的字符串开头 |
| boolean endsWith(String str) | 判断字符串是否以str结尾 |
| boolean isEmpty() | 判断字符串内容是否为空 |
| native String intern() | 直接指向常量池 |
3.练习
/**
* 1:输出字符串"HelloWorld"的字符串长度
* 2:输出"HelloWorld"中"o"的位置
* 3:输出"HelloWorld"中从下标5出开始第一次出现"o"的位置
* 4:截取"HelloWorld"中的"Hello"并输出
* 5:截取"HelloWorld"中的"World"并输出
* 6:将字符串" Hello "中两边的空白去除后输出
* 7:输出"HelloWorld"中第6个字符"W"
* 8:输出"HelloWorld"是否是以"h"开头和"ld"结尾的。
* 9:将"HelloWorld"分别转换为全大写和全小写并输出。
* @author Admin
*
*/
public class Test {
public static void main(String[] args) {
// 0123456789
String str = "HelloWorld";
test1(str);
test2(str);
test3(str);
test4(str);
test5(str);
test6(str);
test7(str);
test8(str);
test9(str);
test10(str);
//以下自行调用test2,test3...等方法。
}
/**
* 以当前方法为例,下面继续编写test2,test3...等方法。
* 每个方法中实现类描述中的一个需求。
* 当前方法实现:1输出字符串"HelloWorld"的字符串长度
*
* test2实现:2:输出"HelloWorld"中"o"的位置
* 以此类推。
* @param str
*/
public static void test1(String str){
System.out.println(str.length());
}
public static void test2(String str){
System.out.println("text2:"+str.indexOf("o"));
}
public static void test3(String str){
System.out.println("text3:"+str.indexOf("o",5));
}
public static void test4(String str){
System.out.println("text4:"+str.substring(0, 5));
}
public static void test5(String str){
System.out.println("text5:"+str.substring(5));
}
public static void test6(String str){
System.out.println("text6:"+" Hello ".trim());
}
public static void test7(String str){
System.out.println("text7:"+str.charAt(5));
}
public static void test8(String str){
System.out.println(str.startsWith("H"));
System.out.println(str.endsWith("ld"));
System.out.println("H".equals(String.valueOf(str.charAt(0)))&&("ld".equals(str.substring(str.length()-2))));
}
public static void test9(String str){
System.out.println("text9:"+str.toUpperCase());
}
public static void test10(String str){
char[] at = str.toCharArray();
for(int i=0;i<at.length;i++) {
System.out.println(at[i]);
}
System.out.println(str.toCharArray());
}
}
/**
* 检查一个字符串是否为回文
* 回文:正着念与反着念一样,例如:上海自来水来自海上
*
*/
public class Test {
public static void main(String[] args) {
String str = "上海自来水来自海上";
System.out.println(check(str));
/*
* 用户从控制台输入一个字符串,然后调用check方法检查
* 该字符串是否为回文,然后输出检查结果。
* 若是回文则输出:是回文
* 否则输出:不是回文
*/
}
/**
* 判读该方法是否是回文
* @param str 需要判断的字符串
* @return true表示是回文,false表示不是回文
*/
public static boolean check(String str){
char[] strarry = str.toCharArray();
boolean flag = true;
for(int i=0;i<strarry.length/2;i++) {
if(strarry[i]!=strarry[strarry.length-1-i]) {
flag = false;
System.out.println(flag);
}
}
return flag;
}
}
/**
* 要求用户从控制台输入一个email地址,然后获取该email的用户名(@之前的内容)
*/
public class Test04 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
int star = str.indexOf(".");
int end = str.indexOf("@");
System.out.println(str.substring(star+1, end));
}
}
/**
* 用户从控制台输入一个字符串,须至少包含一个“/”,如果没有,给出错误提示;
* 如果有,获取最后一个“/”后的字符串。
*/
public class Test {
public static void main(String[] args) {
System.out.println("---------补充---------");
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.equalsIgnoreCase(s2));
String s3 = "abc";//97
String s4 = "ayzawe";//120
System.out.println(s3.compareTo(s4));
String s5 = "abc";
String s6 = "abc";
System.out.println(s5.compareTo(s6));
Scanner in = new Scanner(System.in);
System.out.print("请输入:");
String str = in.nextLine();
if(str.indexOf("/")==-1) {
System.out.println("不包含/");
}else {
System.out.println(str.charAt(str.lastIndexOf("/")-1));
}
}
}
/**
* 生成一个 包含所有汉字的字符串,且每生成50个汉字进行换行输出。
* 提示:java字符类型采用Unicode字符集编码,所有汉字的Unicode范围是:\u4e00-\u9fa5
* @author Admin
*/
public class Text {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
/*
* 整数直接量可以直接赋值给byte,short,char但不能超出范围
* byte,shot,char型数据参与运算时,一律转换为int再运算
*/
for(char c='\u4e00',i=1;c<='\u9fa5';c++,i++) {
sb = sb.append(c);
System.out.print(c);
if(i%50==0)System.out.println();
}
}
}
二、java.lang.StringBuilder(.StringBuffer)
专门用来修改字符串的类,由于每一个字符串都是一个对象如果频繁修改时则会频繁创建对象,该类的对象可用类中具有的方法来修改字符串
1.构造方法
| 方法名 | 描述 |
|---|---|
| public StringBuffer() | 无参构造方法,其初始容量为 16 个字符 |
| public StringBuffer(int capacity) | 指定容量的字符串缓冲区对象 |
| public StringBuffer(String str) | 指定字符串内容的字符串缓冲区对象 |
2.常用方法
| 方法名 | 描述 |
|---|---|
| StringBuffer append(String str) | 把字符串添加到字符串缓冲区,并返回字符串缓冲区本身。注意:该方法被多次重载,可以把任意类型的数据添加到字符串缓冲区 |
| StringBuffer insert(int offset,String str) | 在指定位置把字符串插入到字符串缓冲区,并返回本身。注意:该方法被多次重载,可以在指定位置把任意类型的数据插入到字符串缓冲区 |
| public StringBuffer deleteCharAt(int index) | 删除指定位置的字符,并返回本身 |
| public StringBuffer delete(int start,int end) | 删除从指定位置开始到指定位置结束的内容,并返回本身.注意:包含start,但是不包含end |
| public StringBuffer replace(int start,int end,String str) | 从start开始到end结束用str替换,并返回本身 |
| public void setCharAt(int index,char ch) | 将给定索引处的字符设置为ch |
3.StringBuilder与String相互转换
构造方法:public String(StringBuilder sb);
toString方法:public String toString();
备注:StringBuilder已经覆盖重写了Object当中的toString方法。
参考
渴望成长的原创文章
原文链接:https://blog.youkuaiyun.com/m0_51779342/article/details/126860046
文章介绍了Java编程中String类和StringBuffer类的基本用法。String是不可变的字符串类,适合在不需要修改字符串的场景,多线程环境下使用安全。而StringBuffer是可变的,适用于字符串频繁修改的情况,但在多线程环境下需要同步处理。文章通过示例代码展示了它们的构造方法、常用方法,并提供了相关练习题帮助读者加深理解。

733

被折叠的 条评论
为什么被折叠?



