黑马程序员--String&StringBuffer&StringBuilder

------- android培训java培训、期待与您交流! ----------

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

学习感悟

    操作字符串的方法有很多,刚开始学的时候感觉知识点太多了,有点晕菜了,但学完一回顾大致也就分为四类,增删改查.StringBuffer和StringBuilder的区别就在于是否是线程安全,线程安全的有同步代码,每次运行都需要判断同步锁,效率相比之下也就比较低.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值