【Java】String类

一、String类的基本概述

1、API

Java.lang   //不用导包

public final class String

String类代表字符串。Java程序中的所有字符串字面值(如:”abc“)都作为此类的实例实现。

即”abc“就是String类的实例对象。


2、重点理解

字符串是常量;它的值在创建之后不能更改。解释如下:

截图来源:https://www.cnblogs.com/cisum/p/8011485.html


s只是一个String对象的引用,并不是对象本身。


字符串常量池:

 字符串池是方法区中的一部分特殊存储。当一个字符串被创建的时候,首先会去这个字符串池中查找,如果找到,

直接返回对该字符串的引用;  

    (也就是说,如果两个字符串的内容完全一样,那么他们的内存地址一定相等,且其实只有一份)


线程的安全性;

 多线程操作之所以不安全,完全是因为多个子线程在同一时间内操作某个公共变量,且该变量在操作之后变量的值

  会发生改变;因为String一旦创建之后,就无法再修改其值,所以,String是线程安全的;


3、创建与存储机制(参笔试面试宝典)


4、如果直接打印对象的引用,会默认调用toString方法,如果返回的不是对象@哈希地址,那么toString方法就被重写了。

String 类重写了toString方法,返回的是该对象本身。


二、String类的构造方法(11种)

1、public String():空构造 空的字符串

2、public String(byte[] bytes):把字节数组转成字符串,解码GBK   byte[]

3、public String(byte[] bytes,int index, int length):把字节数组的一部分转换成字符串,length是要转换的长度  byte[]

4、public String(char[] value):将字符数组转换成字符串  char[]

5、public String(char[] value,int index, int count):把字符数组的一部分转换成字符串

5、public String(String original):把字符串常量值转换成字符串


三、常见面试题(掌握)

1、常量池中没有这个对象就创建一个,有的话就直接用不用再创建了。指向同一个对象的引用的地址值是相同的

2、new String("abc");创建两个对象,一个在常量池中,一个在堆内存中(字符串的副本),地址值不一样就是两个对象。(前提是常量池中之前没有abc,如果有的话这里就创建一个对象)。

3、“+”,java语言提供对字符串串联符号+以及将其他对象转换为字符串的特殊支持。字符串穿蓝是通过先创建StringBuilder(StringBuffer)对象的append方法实现拼接,然后通过toString方法将字符串返回。

内存图示意:


flase

true


四、String类的判断功能(掌握)

1、boolean equals(Object obj):比较字符串的内容是否相同,区分大小写

2、boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

3、boolean contains(String str):判断大字符串中是否包含小字符串

4、boolean  startWith(String str):判断字符串是否以某个指定的字符串开头

5、boolean endWith(String str):判断字符串是否以某个指定的字符串结尾

6、4、boolean isEmpty():判断字符是否为空


null和“ ”的区别:

1、“ ”是字符串常量,同事也是一个String类的对象,也可调用String类的方法

2、null是空常量,不能调用任何办法,否则会出现空指针异常


五、模拟用户登录

需求:模拟登陆,给三次机会,并提示还有几次。

用户名和密码都是admin

分析:

1、模拟登陆,需要键盘录入,Scanner

2、给三次机会,需要循环,for

3、并提示有几次,需要判断,if

import java.util.Scanner;;
public class Test_monidenglu {
	public static void main(String[] args) {		 
		 int count;
		 for(int i = 1;i<=3;i++) {
			 Scanner sc = new Scanner(System.in);
			 System.out.println("请输入用户名:");
			 String name = sc.nextLine();
			 System.out.println("请输入密码:");
			 String password = sc.nextLine(); 
			 if (name.equals("admin") && password.equals("admin")) {
				 System.out.println("成功登陆!");
				 break;
			 }else
			 {
				 count = 3-i;
				 System.out.println("您还有"+ count +"次机会");
				 System.out.println("请继续输入");
				 if(count ==0) {
					 System.out.println("您的次数已用完,请联系客服找回用户名和密码");
				 }
			 }
			 
		 }
	}
}

六、String类的获取功能(掌握)

1、int length():获取字符串的长度(每个字符的个数不是字节长度),注意数组中的legth是属性,而这里是方法

2、char charAt(int index):获取指定索引位置的字符

3、int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引

4、int indexOf(String  str):返回指定字符串在此字符串中第一次出现处的索引

5、int indexOf(int ch, int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引

6、lastIndexOf(String str):返回指定字符串在此字符串中最后一次出现的索引

7、String substring(int start):从指定位置开始截取字符串,默认到末尾

8、String substring(int start,int end):从指定位置开始到指定位置结束截取字符串,包含头不包含尾


七、字符串的遍历

需求:遍历字符串


八、统计不同类型的字符个数

需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数

ABCDEabcd123456!@#$%^

public class Test_tongji {
	public static void main(String[] args) {
		int x = 0 ,y = 0, z=0, k=0;
		String s = "ABCDEabcd123456!@#$%^";
		for(int i = 0;i < s.length();i++) {
			char a = s.charAt(i);  //char charAt(int index):获取指定索引位置的字符
			if(a >='A' && a <= 'Z') {
				x++;
			}else if(a >='a' && a <= 'z')
			{
				y++;
			}else if(a >='1' && a <='9')
			{
				z++;
			}else
			{
				k++;
			}
		}
		System.out.println("大写字母的个数是:"+ x);
		System.out.println("小写字母的个数是:"+ y);
		System.out.println("数字的个数是:"+ z);
		System.out.println("其他字母的个数是:"+ k);
	}
}


九、String类的转换功能

1、byte[] geyBytes():把字符串转换为字符数组  编码:将看的懂的转换为计算机看的

GBK编码:一个中文代表两个字节。中文的第一个字节肯定是负数。

2、char[] toCharArray():把字符串转换为字符数组

3、static String valueOf(char[] chs):把字符数组转换为字符串

4、static String valueOf(int i):把int 类型的数据转换为字符串

注意:String类的valueOf方法可以把任意类型的数据转换成字符串。重载类型。都是静态方法,类名.方法就可以调用了。该方法的底层实现其实就是String的一个构造方法,将new String方法封装起来了。

5、String toLowerCase():把字符串转换成小写

6、String toUpperCase():把字符串转换成大写

7、String concat(String str):把字符串拼接


十、String类的其他功能

1、String的替换功能

String replace(char old,char new)

String replace(String old,String new)

2、String的去除字符串两端空格

String trim();

3、String的按照字典顺序比较两个字符串  按照码表值比较  ASICC unicode

int compareTo(string str)

int compareToIgnoreCase(string str):忽略大小写


十一、字符串的反转

思路:

1、通过键盘录入获取字符串

2、将字符串转换成字符数组

3、倒着白哪里字符数组。并再次拼接成字符串

4、打印

public class Test_fanzhuang {
	public static void main(String[] args) {
		String s="abc";
		char[] ch = s.toCharArray();
		String ss = "";
		for(int i = ch.length-1; i >= 0; i--) {   //倒着遍历
			ss = ss + ch[i];  //字符拼接
		}		
		System.out.println(ss);
	}
}

十二、在大字符串中找小字符串出现的次数

思路:

1、定义计数器变量

2、判断小字符串中是否有小字符串 indexOf()

   有,用substring()将大字符串进行截取(在第一次小字符串的后边进行截取),重新赋值给大字符串,计数器加1,继续循环。

   没有,返回-1

3、打印计数器

import java.util.Scanner;
public class Test_daxiaochuan {
	public static void main(String[] args) {
		Scanner sc1 = new Scanner(System.in);
		System.out.println("请输入大字符串:");
		String s1 = sc1.nextLine();
		
		Scanner sc2 = new Scanner(System.in);
		System.out.println("请输入小字符串:");
		String s2 = sc2.nextLine();
		
		int count = 0;
		while(s1.indexOf(s2) != -1) {   //大字符串中出现小字符串
			int index = s1.indexOf(s2);
			s1 = s1.substring(index+s2.length());  //将大字符串进行截取
			count++;
		}
                System.out.println(count);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值