当前位置: 代码迷 >> 综合 >> 黑马程序员——基础学习(九)String的实际案例及StringBuffer/StringBuilder
  详细解决方案

黑马程序员——基础学习(九)String的实际案例及StringBuffer/StringBuilder

热度:43   发布时间:2023-12-14 00:14:33.0

------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,0System.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,StringBufferStringBuilder的区别

String的长度是固定的,而StringBuffer,StringBuilder都是可变的。 

StringBuffer线程安全,效率低。StringBuilder线程不安全,效率高。

B:StringBuffer和数组的区别

StringBuffer的添加功能,可以添加任意类型的数据,最终的本质是一个字符串数据。

数组只能添加同一种类型的元素。

C:StringStringBuffer分别做参数传递

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);

 


  相关解决方案