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

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

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值