(24)Java基础 --String类

目录

一、概述

二、常量池

三、String类常见的构造方法

四、内存图

五、String类常用的方法

(1)API

(2)判断功能的方法

(3)获取功能的方法

(4)转换功能的方法

(5)其他方法


一、概述

  1. String就是字符串类型,属于java.lang包,不需要导包
  2. 所有的字符串常量(“Hello World”、”abc”)都属于String类型的对象
  3. 字符串字面值属于常量,存储在方法区的常量池中。
  4. String类型在创建之后就无法更改(是一个不可变的字符序列)。
  5. 不可变的原因是String类型只提供了构造方法,没有提供set方法,因此只能在创建对象的时候,初始化成员变量,将来对象创建完成之后,无法通过方法来修改。

二、常量池

对程序而言,全部String字面值中往往有大量的冗余,为了使java更高效地使用内存,JVM留出一块特殊的内存区域,称为“String常量池”。当编译器遇到String字面值时,它检查该池内是否已经存在相同的String字面值。如果找到,则将新的字面值的引用指向现有的String,而不创建任何新的String字面值对象。

String str1 = "abc";  // 内存中有几个对象???  一个——常量池中
String str2 = "abc";  // 内存中有几个对象??? 一个
String str3 = new String("abc");  //两个,一个在堆区,一个在常量池
System.out.println(str1==str2);  //true
System.out.println(str1==str3);  //false

三、String类常见的构造方法

1、String():创建一个空字符串

2、String(String original):创建参数字符串的一个副本(参数字符串是在常量池中,构造方法创建的字符串是在堆内存中

3、String(byte[] arr):将一个字节数组转成一个字符串。将我们不认识的字节数组,转成了我们认识的字符串,过程叫做【解码】。查询的是当前平台默认的编码表。

4、String(byte[] arr, int offset, int length):将字节数组的一部分转成字符串

5、String(char[] arr):将字符数组转成字符串。既不是编码,也不是解码,只不过是把字符串成了串

6、String(char[] arr, int offset, int length):将字符数组的一部分转成字符串

构造字符串对象的另一种形式,最简单的一种形式:
                String str = "ityouxin";

String str = new String();   // 创建了一个空串  ""
//String str = "";
System.out.println(str);

String str1 = new String(new byte[]{65,66,67,68,69});
System.out.println(str1);    // ABCDE

String str2 = new String(new byte[]{65,66,67,68,69},2,3);
System.out.println(str2);    // CDE

String str3 = new String(new char[]{'a','b','c','d','e'});
System.out.println(str3);    // abcde

String str4 = new String(new char[]{'a','b','c','d','e'},2,3);
System.out.println(str4);    // cde

四、内存图

五、String类常用的方法

(1)API

概述

API(Application Programming Interface),应用程序编程接口。

Java API是一本程序员的字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。

使用步骤

1.打开帮助文档。

2.点击显示,找到索引,看到输入框。

3.你要找谁?在输入框里输入,然后回车。

4.看包。java.lang下的类不需要导包,其他需要。

5.看类的解释和说明。

6.学习构造方法。

7.使用成员方法。

(2)判断功能的方法

  1. equals(Object obj):判断调用者和参数对象描述的字符串内容是否相同
  2. equalsIgnoreCase(String otherStr):忽略大小写判断两个字符串内容是否相同
  3. contains(String str):判断调用者是否包含了str这个子串
  4. startsWith(String prefix):判断调用者是否以prefix开头
  5. endsWith(String suffix):判断调用者是否以suffix结尾
  6. isEmpty():判断调用者是否是空串
String s1 = "aaa";
String s2 = new String("aaa");
System.out.println(s1.equals(s2));	
		
//判断键盘输入的值是否为admin
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
		
		
System.out.println(str=="admin");
System.out.println("admin".equals(str));  //常量和变量使用equals比较内容时,尽量把常量写在         
                                          //前面		
		
//equalsIgnoreCase 忽略大小写的比较
String str1 = "aaa";
String str2 = "AAA";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
		
//contains 判断字符串是否包含某内容(子串)
String str = "abcde";
System.out.println(str.contains("ab"));
System.out.println(str.contains("cde"));
System.out.println(str.contains("ac"));
		
// startsWith   endsWith  判断字符串是否以某个值开头,是否以某个值结尾
String str="http://www.sina.com.cn";
		
System.out.println(str.startsWith("h"));
System.out.println(str.startsWith("http"));
System.out.println(str.startsWith("http://www.sina.com.cn"));
System.out.println(str.startsWith("a"));
		
		
System.out.println(str.endsWith("cn"));
System.out.println(str.endsWith(".cn"));
	
		
// isEmpty 判断字符串是否 为空串
String str1 = "";
String str2 = new String();
String str3 = new String("");
String str4 = " ";
		
System.out.println(str1.isEmpty());
System.out.println(str2.isEmpty());
System.out.println(str3.isEmpty());
System.out.println(str4.isEmpty());

(3)获取功能的方法

1、length():获取字符串字符的个数

2、charAt(int index):返回调用者字符串中索引为index的字符(和length方法结合之后可以遍历字符串)

3、substring(int beginIndex):获取一个字符串,内容是从当前字符串的beginIndex索引开始

4、substring(int beginIndex, int endIndex):获取一个指定索引范围的子串

                注意事项:1、包含头不包含尾,返回的结果中,不包含endIndex索引指向的字符;2、所有的方法都无法修改字符串对象本身,一般都是返回一个新的字符串对象

5、indexOf家族:

indexOf(int ch):返回ch字符在当前调用者字符串中,第一次出现的索引

indexOf(int ch, int fromIndex):从fromIndex索引开始寻找,找到ch字符在当前字符串中第一次出现的索引

indexOf(String str):返回的是str这个字符串在调用者字符串中第一次出现的索引

indexOf(String str, int fromIndex):从fromIndex索引开始寻找,找到str字符串在当前字符串中第一次出现的索引(注意:无论从哪个位置开始找,所有字符的索引都不会变化)

6、lastIndexOf家族:

和IndexOf基本一样,只不过是从后往前找,所有字符和字符串的索引也都不会发生变化

public static void main(String[] args) {
/*
		// 1 length()  获取字符串长度(由多少个字符组成)
		String str = "abc";
		int x = str.length();
		System.out.println(x);
*/
		
/*		
		//2 charAt 获取某个位置上的字符
		String str = "abcde";
		char c = str.charAt(1);
		System.out.println(c);
*/	
/*		
		//3 substring 截取子串
		String str = "abcdefg";
		String result = str.substring(2);  //取到最后
		System.out.println(result);
		String result2 = str.substring(2,4); // 左闭右开
		System.out.println(result2);
		
*/	
/*		
		//4 indexOf 查找位置
		String str = "abcdeabcd";
		int idx = str.indexOf("cd");
		System.out.println(idx);
		
		int idx2 = str.indexOf("ab",3);
		//int idx2 = str.indexOf("ab",-3);// 第2个参数为负数,相当于0
		System.out.println(idx2);
		
		int idx3 = str.indexOf("xy");
		System.out.println(idx3);    // 找不到时,返回-1
		
		
*/		
/*	
		//5 lastIndexOf 查找位置  从后向前找
		String str = "abcdeabcd";
		
		int idx = str.lastIndexOf("cd");
		System.out.println(idx);
	
		int idx2 = str.lastIndexOf("ab",3);
		System.out.println(idx2);
	
		int idx3 = str.lastIndexOf("xy");
		System.out.println(idx3);    // 找不到时,返回-1
	*/
}

(4)转换功能的方法

  1. byte[] getBytes():将当前字符串,转成字节数组
  2. char[] toCharArray():将当前的字符串,转成字符数组
  3. toUpperCase():将当前的字符串,转成全大写形式
  4. toLowerCase():将当前的字符串,转成全小写形式
  5. concat(String str):将当前调用者,和参数str进行拼接,返回拼接后的长字符串(不常用,因为更多使用的是运算符+)
  6. valueOf家族:可以将任意数据类型的数据,转换成字符串
public static void main(String[] args) {
/*	
		// 1 getBytes()  将字符串转换成字节数组
		String str = "abcd";
		byte[] b = str.getBytes();
		for(byte bb:b){
			System.out.println(bb);
		}
*/	
/*		
		// 2 toCharArray() 将字符串转成字符数组
		String str = "abcd";
		char[] cc = str.toCharArray();
		
		for(char c:cc){
			System.out.println(c);
		}
*/	
		
/*		
		// 3 toUpperCase 小写转大写
		String str = "abcd";
		
		String str2 = str.toUpperCase();
		System.out.println(str2);
		
*/	
/*		
	    //4 toLowerCase 大写转小写
		String str = "AbCd";
		String str2 = str.toLowerCase();
		System.out.println(str2);
		
*/	
	
/*		
		//5 concat 用来拼接字符串  和 +的作用相同 . 不同点: + 可以加任何类型   而concat只能拼接字符串
		String s1 = "aaa";
		String s2 = "bbb";
		String s3= s1.concat(s2);
		System.out.println(s3);
		
*/	
/*		
		//6 valueOf 将其他类型转换成字符串   静态方法
		
		int x = 100;
		String str = String.valueOf(x);
		System.out.println(str+1);  // "1001"
		
		int y = 200;
		String str2 = y+"";  //任何类型和字符串相加结果都是字符串
		System.out.println(str2+1);  //"2001"	
*/		
}

练习

键盘录入一个大小写混杂的纯英文字符串

将字符串转换成首字母大写,其他字母全部小写

例如,键盘录入”i lOvE jAvA”,转换成 “I love java”

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();  // 首字母转大写,其他小写
		
		String s1 = str.substring(0,1); //截取首字母
		String s2 = str.substring(1);   //截取其他
		
		String result = s1.toUpperCase()+s2.toLowerCase();
		System.out.println(result);
		
}

(5)其他方法

  1. replace(String oldStr, String newStr):将调用者中的老串替换成新串
  2. trim():去掉字符串左右两边的空格、制表符
  3. split():字符串拆分
public static void main(String[] args) {
/*		
		// replace 替换   replaceAll---后面讲
		
		String str = "www.baidu.com";
		
		String str2 = str.replace("w", "x");
		System.out.println(str2);
		
		
		String str3 = str.replace("www", "x");
		System.out.println(str3);
		
*/
		
/*		
		// trim 去首尾空格
		
		String str = "  aaa  bbb        ";
		String str2 = str.trim();
		System.out.println(str);
		System.out.println(str2);
		
*/	
	/*	
		// split 字符串拆分   拆成数组
		String str = "aaa#bbb#ccc#ddd";
		String[] ss = str.split("#");
		for(String s:ss){
			
			System.out.println(s);
		}
*/
		
				
		String str = "aaa+bbb+ccc+ddd";
		//String[] ss = str.split("+");  // 因为+是正则表达式(后面讲)的特殊字符    (+ . * ?)需要转义
		String[] ss = str.split("\\+");
		for(String s:ss){
			
			System.out.println(s);
		}
}

上一篇:(23)Java基础 --单例模式

下一篇:(25)Java基础 --字符串缓冲区StringBuilder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值