------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
String的实际案例及StringBuffer/StringBuilder
String类的案例:
模拟用户登录
我的代码:
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
// 定义用户名和密码。
String username = "admin";
String password = "admin";
for (int x = 0; x < 3; x++) {
// x=0,1,2
// 键盘录入用户名和密码。
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String pwd = sc.nextLine();
// 比较录入的和已知的是否相同。如果相同,就登录成功。否则,登录失败。
if (username.equals(name) && password.equals(pwd)) {
System.out.println("登录成功");
// 开始游戏
break;
} else {
if ((2 - x) == 0) {
System.out.println("登陆次数已经到上限!");
} else {
// 2,1,0
System.out.println("登录失败,你还有" + (2 - x) + "次机会");
}
}
}
}
}
统计字符串中大写,小写,及数字字符的个数
我的代码:
import java.util.Scanner;
public class StringTest2 {
public static void main(String[] args) {
// 键盘录入一个字符串。用Scanner实现。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
// 定义统计变量
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
// 遍历字符串,获取到每一个字符
for (int x = 0; x < line.length(); x++) {
char ch = line.charAt(x);
// 判断该字符属于哪种类型的?
if (ch >= 'A' && ch <= 'Z') {
bigCount++;
} else if (ch >= 'a' && ch <= 'z') {
smallCount++;
} else if (ch >= '0' && ch <= '9') {
numberCount++;
}
}
// 输出结果
System.out.println("大写字符:" + bigCount);
System.out.println("小写字符:" + smallCount);
System.out.println("数字字符:" + numberCount);
}
}
C:把字符串的首字母转成大写
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
// 键盘录入字符串,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
// 截取字符串的第一个数据
String s1 = line.substring(0, 1);
// 截取字符串的其他数据
String s2 = line.substring(1);
// B转大写+C转小写
String s3 = s1.toUpperCase().concat(s2.toLowerCase());
// 输出结果
System.out.println(s3);
}
}
StringBuffer/StringBuilder
StringBuffer是线程安全的可变长度的字符串。
字符串缓冲区类,也可以看成是一个字符串容器。
构造方法:
A:StringBuffer()
B:StringBuffer(int size)
C:StringBuffer(String str)
(3)StringBuffer的常见功能
A:添加功能
public StringBuffer append(String str) 添加字符串数据
public StringBuffer insert(int offset,String str) 指定位置添加字符串
B:删除功能
public StringBuffer deletecharAt(int index) 指定开始的索引删除字符串
public StringBuffer delect(int startIndex,int endIndex) 指定开始和结束的索引,删除字符串
C:替换功能
public StringBuffer replace(int start,int end,String str) 指定开始和结束的索引,替换字符串
D:反转功能
public StringBuffer reverse() 将字符串倒序
E:截取功能
public StringBuffer substring(int start )从指定位置开始截取字符串
public StringBuffer substring(int start,int end)从指定开始和结束位置开始截取字符串
案例
字符串反转
我的代码
import java.util.Scanner;
public class StringBufferTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
System.out.println(getString(line));
System.out.println(getString2(line));
}
public static String getString2(String s) {
return new StringBuffer(s).reverse().toString();
}
public static String getString(String s) {
String result = "";
char[] chs = s.toCharArray();
for (int i = chs.length - 1; i >= 0; i--) {
result += chs[i];
}
return result;
}
}
面试题
A:String,StringBuffer和StringBuilder的区别
String的长度是固定的,而StringBuffer,StringBuilder都是可变的。
StringBuffer线程安全,效率低。StringBuilder线程不安全,效率高。
B:StringBuffer和数组的区别
StringBuffer的添加功能,可以添加任意类型的数据,最终的本质是一个字符串数据。
数组只能添加同一种类型的元素。
C:String和StringBuffer分别做参数传递
String 作为形式参数的话,看成传递的不是地址值,而是常量池。
StringBuffer 作为形式参数的话,传递的是地址值。
D:String类中的方法,虽然返回String类型,但是返回的不是自己。
而StringBuffer类中的方法,如果返回的是StringBuffer类型,那么,返回的是StringBuffer本身
String s = "hello";
s.replace('h','a');
System.out.println(s);
StringBuffer sb = new StringBuffer("hello");
sb.replace(0,1,"a");
System.out.println(sb);