String类的概述

String类的概述

1.String类的概述
  • 通过JDK提供的API,查看String类的说明
    • 字符串字面值"abc"也可以看成是一个字符串对象。
    • 字符串是常量,一旦被赋值,就不能被改变。
public class Demo1_String {
public static void main(String[] args) {
	//Person p = new Person();
	//"abc"可以看成一个字符串对象
	String str = "abc";					
	//当把"def"赋值给str,原来的"abc"就变成了垃圾
	str = "def";						
	//String类重写了toString方法返回的是该对象本身	
	System.out.println(str);			
}
}
2.String类的构造方法
  • 常见构造方法
    • public String():空构造
    • public String(byte[] bytes):把字节数组转成字符串
    • public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
    • public String(char[] value):把字符数组转成字符串
    • public String(char[] value,int index,int count):把字符数组的一部分转成字符串
    • public String(String original):把字符串常量值转成字符串
public class Demo2_StringCon {
public static void main(String[] args) {
	String s1 = new String();
	System.out.println(s1);
	
	byte[] arr1 = {97,98,99};	
	//解码,将计算机读的懂的转换成我们读的懂	
	String s2 = new String(arr1);			
	System.out.println(s2);
	
	byte[] arr2 = {97,98,99,100,101,102};
	//将arr2字节数组从2索引开始转换3个
	String s3 = new String(arr2,2,3);		
	System.out.println(s3);

	
	char[] arr3 = {'a','b','c','d','e'};
	//将字符数组转换成字符串	
	String s4 = new String(arr3);
	System.out.println(s4);
	
	//将arr3字符数组,从1索引开始转换3个
	String s5 = new String(arr3,1,3);		
	System.out.println(s5);
	
	String s6 = new String("javaEE");
	System.out.println(s6);
}
}
3.String类常见的面试题
* 1.判断定义为String类型的s1和s2是否相等
	* String s1 = "abc";
	* String s2 = "abc";
	* System.out.println(s1 == s2); 					
	* System.out.println(s1.equals(s2)); 		
* 2.下面这句话在内存中创建了几个对象?
	* String s1 = new String("abc");			
* 3.判断定义为String类型的s1和s2是否相等
	* String s1 = new String("abc");			
	* String s2 = "abc";
	* System.out.println(s1 == s2);		
	* System.out.println(s1.equals(s2));
* 4.判断定义为String类型的s1和s2是否相等
	* String s1 = "a" + "b" + "c";
	* String s2 = "abc";
	* System.out.println(s1 == s2);		
	* System.out.println(s1.equals(s2));
* 5.判断定义为String类型的s1和s2是否相等
	* String s1 = "ab";
	* String s2 = "abc";
	* String s3 = s1 + "c";
	* System.out.println(s3 == s2);
	* System.out.println(s3.equals(s2));
public class Demo3_String {
public static void main(String[] args) {
	//demo1();
	//demo2();
	//demo3();
	//demo4();
	
	String s1 = "ab";
	String s2 = "abc";
	String s3 = s1 + "c";
	System.out.println(s3 == s2);
	System.out.println(s3.equals(s2)); 	//true
}

private static void demo4() {
//在编译时就变成7,把7赋值给b,常量优化机制
	//byte b = 3 + 4;		
					
	String s1 = "a" + "b" + "c";
	String s2 = "abc";
	System.out.println(s1 == s2); 	//true,java中有常量优化机制	
	System.out.println(s1.equals(s2)); 	//true
}

private static void demo3() {
   //记录的是堆内存对象的地址值
	String s1 = new String("abc");	
	//记录的是常量池中的地址值				
	String s2 = "abc";						
	System.out.println(s1 == s2); 	//false
	System.out.println(s1.equals(s2)); //true
}

private static void demo2() {
	//创建几个对象
	//创建两个对象,一个在常量池中,一个在堆内存中
	String s1 = new String("abc");		
	System.out.println(s1);
}

private static void demo1() {				
//常量池中没有这个字符串对象,就创建一个,如果有直接用即可
	String s1 = "abc";
	String s2 = "abc";
	System.out.println(s1 == s2); 	//true	
	System.out.println(s1.equals(s2)); //true
}
}
4.String类的判断功能
  • String类的判断功能
    • boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
    • boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
    • boolean contains(String str):判断大字符串中是否包含小字符串
    • boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
    • boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
    • boolean isEmpty():判断字符串是否为空。
public class Demo4_StringMethod {
public static void main(String[] args) {
	//demo1();
	//demo2();
	
	String s1 = "javaEE";
	String s2 = "";
	String s3 = null;
	
	System.out.println(s1.isEmpty());
	System.out.println(s2.isEmpty());
	System.out.println(s3.isEmpty());//输出结果:java.lang.NullPointerException
	
}

private static void demo2() {
	String s1 = "我爱heima,哈哈";
	String s2 = "heima";
	String s3 = "baima";
	String s4 = "我爱";
	String s5 = "哈哈";
	
	//判断是否包含传入的字符串
	System.out.println(s1.contains(s2));		
	System.out.println(s1.contains(s3));
	
	System.out.println("------------------");
	//判断是否以传入的字符串开头
	System.out.println(s1.startsWith(s4));		
	System.out.println(s1.startsWith(s5));
	
	System.out.println("------------------");
	//判断是否以传入的字符串结尾
	System.out.println(s1.endsWith(s4));		
	System.out.println(s1.endsWith(s5));
}

private static void demo1() {
	String s1 = "heima";
	String s2 = "heima";
	String s3 = "HeiMa";
	
	System.out.println(s1.equals(s2));	//true
	System.out.println(s2.equals(s3));	//false
	
	System.out.println("---------------");
	
	System.out.println(s1.equalsIgnoreCase(s2));	
	//不区分大小写
	System.out.println(s1.equalsIgnoreCase(s3)); 	
}
}
5.String类的获取功能
  • String类的获取功能
    • 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):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
    • lastIndexOf
    • String substring(int start):从指定位置开始截取字符串,默认到末尾。
    • String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
public class Demo5_StringMethod {

public static void main(String[] args) {
	//demo1();
	//demo2();
	//demo3();
	//demo4();
	
	String s = "woaiheima";
	//subString会产生一个新的字符串,需要将新的字符串记录
	s.substring(4);									
	System.out.println(s);
}

private static void demo4() {
	String s1 = "heimawudi";
	String s2 = s1.substring(5);
	System.out.println(s2);
	
	//包含头,不包含尾,左闭右开
	String s3 = s1.substring(0, 5);					
	System.out.println(s3);
}

private static void demo3() {
	String s1 = "woaiheima";
	//从指定位置开始向后找
	int index1 = s1.indexOf('a', 3);					
	System.out.println(index1);
	
	//从后向前找,第一次出现的字符
	int index2 = s1.lastIndexOf('a');					
	System.out.println(index2);
	
	//从指定位置向前找
	int index3 = s1.lastIndexOf('a', 7);				
	System.out.println(index3);
}

private static void demo2() {
	String s1 = "heima";
	//参数接收的是int类型的,传递char类型的会自动提升
	int index = s1.indexOf('e');						
	System.out.println(index);
	
	//如果不存在返回就是-1
	int index2 = s1.indexOf('z');						
	System.out.println(index2);
	
	//获取字符串中第一个字符出现的位置
	int index3 = s1.indexOf("ma");						
	System.out.println(index3);
	
	int index4 = s1.indexOf("ia");
	System.out.println(index4);
}

private static void demo1() {
	//int[] arr = {11,22,33};
	//数组中的length是属性
	//System.out.println(arr.length);					
	String s1 = "heima";
	//length()是一个方法,获取的是每一个字符的个数
	System.out.println(s1.length());					
	String s2 = "你要减肥,造吗?";
	System.out.println(s2.length());
	
	//根据索引获取对应位置的字符
	char c = s2.charAt(5);								
	System.out.println(c);
	char c2 = s2.charAt(10);
	//StringIndexOutOfBoundsException字符串索引越界异常
	System.out.println(c2);
}
}
6.字符串的遍历
public class Demo6_StringMethod {

public static void main(String[] args) {
	//demo1();
	//demo2();
	//demo3();
	
	String s1 = "heiMA";
	String s2 = "chengxuYUAN";
	String s3 = s1.toLowerCase();
	String s4 = s2.toUpperCase();
	
	System.out.println(s3);
	System.out.println(s4);
	
	System.out.println(s3 + s4);			
	System.out.println(s3.concat(s4));			
}

private static void demo3() {
	char[] arr = {'a','b','c'};
	String s = String.valueOf(arr);			
	System.out.println(s);
	
	String s2 = String.valueOf(100);		
	System.out.println(s2 + 100);
	
	Person p1 = new Person("cc", 23);
	System.out.println(p1);
	String s3 = String.valueOf(p1);			
	System.out.println(s3);
}

private static void demo2() {
	String s = "heima";
	char[] arr = s.toCharArray();		
	
	for (int i = 0; i < arr.length; i++) {
		System.out.print(arr[i] + " ");
	}
}

private static void demo1() {
	String s1 = "abc";
	byte[] arr = s1.getBytes();
	for (int i = 0; i < arr.length; i++) {
		//System.out.print(arr[i] + " ");
	}
	
	String s2 = "dd";
	byte[] arr2 = s2.getBytes();			
	for (int i = 0; i < arr2.length; i++) {		
		//System.out.print(arr2[i] + " ");		
	}											
	
	String s3 = "i";
	byte[] arr3 = s3.getBytes();
	for (int i = 0; i < arr3.length; i++) {
		System.out.print(arr3[i] + " ");
	}
}

}
7.String类的其他功能
  • String的替换功能及案例演示
    • String replace(char old,char new)
    • String replace(String old,String new)
  • String的去除字符串两空格及案例演示
    • String trim()
  • String的按字典顺序比较两个字符串及案例演示
    • int compareTo(String str)(暂时不用掌握)
    • int compareToIgnoreCase(String str)(了解)
public class Demo7_StringMethod {

public static void main(String[] args) {
	//demo1();
	//demo2();
	
	String s1 = "a";
	String s2 = "aaaa";
	
	//按照码表值比较
	int num = s1.compareTo(s2);				
	System.out.println(num);
	
	String s3 = "黑";
	String s4 = "马";
	int num2 = s3.compareTo(s4);
	//查找的是unicode码表值
	System.out.println('黑' + 0);			
	System.out.println('马' + 0);
	System.out.println(num2);
	
	String s5 = "heima";
	String s6 = "HEIMA";
	int num3 = s5.compareTo(s6);
	System.out.println(num3);
	
	int num4 = s5.compareToIgnoreCase(s6);
	System.out.println(num4);
	
/*
 * public int compare(String s1, String s2) {
  int n1 = s1.length();
  int n2 = s2.length();
  int min = Math.min(n1, n2);
  for (int i = 0; i < min; i++) {
      char c1 = s1.charAt(i);
      char c2 = s2.charAt(i);
       if (c1 != c2) {
       //将c1字符转换成大写
           c1 = Character.toUpperCase(c1);	
           //将c2字符转换成大写					
           c2 = Character.toUpperCase(c2);						
           if (c1 != c2) {
           //将c1字符转换成小写
               c1 = Character.toLowerCase(c1);	
               /将c2字符转换成小写				
               c2 = Character.toLowerCase(c2);					/
               if (c1 != c2) {
                   // No overflow because of numeric promotion
                   return c1 - c2;
               }
           }
       }
   }
   return n1 - n2;
}
*/


private static void demo2() {
	String s = "   hei   ma   ";
	String s2 = s.trim();
	System.out.println(s2);
}

private static void demo1() {
	String s = "heima";
	//用o替换i
	String s2 = s.replace('i', 'o');			
	System.out.println(s2);
	
	//z不存在,保留原字符不改变
	String s3 = s.replace('z', 'o');			
	System.out.println(s3);
	
	String s4 = s.replace("ei", "ao");
	System.out.println(s4);
}

}

练习

  • A:案例演示
    • 需求:模拟登录,给三次机会,并提示还有几次。
    • 用户名和密码都是admin
    • 分析:
    • 1,模拟登录,需要键盘录入,Scanner
    • 2,给三次机会,需要循环,for
    • 3,并提示有几次,需要判断,if
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
 //创建键盘录入对象
Scanner sc = new Scanner(System.in);		

for(int i = 0; i < 3; i++) {
	System.out.println("请输入用户名:");
	//将键盘录入的用户名存储在userName中
	String userName = sc.nextLine();			
	System.out.println("请输入密码:");
	//将键盘录入的密码存储在password中
	String password = sc.nextLine();			
	
	//如果是字符串常量和字符串变量比较,通常都是字符串常量调用方法,将变量当作参数传递,防止空指针异常
	if("admin".equals(userName) && "admin".equals(password)) {
		System.out.println("欢迎" + userName + "登录");
		break;	//跳出循环
	}else {
		if(i == 2) {
			System.out.println("您的错误次数已到,请明天再来吧");
		}else {
			System.out.println("录入错误,您还有" + (2-i) + "次机会");
		}
	}
}
}
}
2.遍历字符串
public class Test2 {
public static void main(String[] args) {
String s = "heima";
//通过for循环获取到字符串中每个字符的索引
for(int i = 0; i < s.length(); i++) {			
	
	/*
	char c = s.charAt(i);
	System.out.println(c);
	*/

      //通过索引获取每一个字符	
	System.out.println(s.charAt(i));	
}
}
}
3.统计
  • A:案例演示
    • 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
    • ABCDEabcd123456!@#$%^
  • 分析:
    • 字符串是有字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符
    • 如果包含就让计数器变量自增
public class Test3 {
public static void main(String[] args) {
	String s = "ABCDEabcd123456!@#$%^";
	int big = 0;
	int small = 0;
	int num = 0;
	int other = 0;
	//1,获取每一个字符,通过for循环遍历
for(int i = 0; i < s.length(); i++) {
	//通过索引获取每一个字符
	char c = s.charAt(i);						
	//2,判断字符是否在这个范围内
	if(c >= 'A' && c <= 'Z') {
		//如果满足是大写字母,就让其对应的变量自增
		big++;									
	}else if(c >= 'a' && c <= 'z') {
		small++;
	}else if(c >= '0' && c <= '9') {
		num++;
	}else {
		other++;
	}
}
	
//3,打印每一个计数器的结果
System.out.println(s + "中大写字母有:" + big + "个,小写字母有:" + small + "个,数字字符:" 
+ num + "个,其他字符:" + other + "个");
}
}
4.案例演示
  • 需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
  • 链式编程:只要保证每次调用完方法返回的是对象,就可以继续调用
public class Test4 {
public static void main(String[] args) {
	String s = "woaiHEImaniaima";
	String s2 = s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase());
	System.out.println(s2);
}
}
5.案例五
/**
* A:案例演示
* 需求:把数组中的数据按照指定个格式拼接成一个字符串
	* 举例:
		* int[] arr = {1,2,3};	
	* 输出结果:
		* "[1, 2, 3]"
		* 
分析:
1,需要定义一个字符串"["
2,遍历数组获取每一个元素
3,用字符串与数组中的元素进行拼接
*/
public class Test5 {

public static void main(String[] args) {
int[] arr = {1,2,3};
//定义一个字符串用来与数组中元素拼接
String s = "[";							

//{1,2,3}
for (int i = 0; i < arr.length; i++) {	
	if(i == arr.length - 1) {
	//[1, 2, 3]
	s = s + arr[i] + "]";			
	}else {
	//[1, 2, 
	s = s + arr[i] + ", ";			
	}
}
System.out.println(s);
}
}
案例六
import java.util.Scanner;

public class Test6 {

/**
 * * A:案例演示
	* 需求:把字符串反转
		* 举例:键盘录入"abc"		
		* 输出结果:"cba"
	*分析:
	*1,通过键盘录入获取字符串Scanner
	*2,将字符串转换成字符数组
	*3,倒着遍历字符数组,并再次拼接成字符串
	*4,打印 
 */
public static void main(String[] args) {
   //创建键盘录入对象
	Scanner sc = new Scanner(System.in);				
	System.out.println("请输入一个字符串:");
	//将键盘录入的字符串存储在line中
	String line = sc.nextLine();						
	
	//将字符串转换为字符数组
	char[] arr = line.toCharArray();					
	
	String s = "";
	//倒着遍历字符数组
	for(int i = arr.length-1; i >= 0; i--) {			
		//拼接成字符串
		s = s + arr[i];									
	}
	
	System.out.println(s);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值