Java常用工具_3.Java字符串

一、String类

1.创建String对象的方法

(1)String s1 = “study”;
创建一个字符串对象study,名为s1
(2)String s1 = new String();
创建一个空字符串对象,名为s2
(3)String s1 = new String(“study”);
创建一个字符串对象study,名为s3

2.String的常用方法

在这里插入图片描述

3.存储方式

在这里插入图片描述
(1)String s1 = “study”;
在栈中创建s1,在常量池中创建"study",s1指向study
(2)String s1 = new String();
在栈中创建s2,常量池中已有"study",直接指向study
(3)String s1 = new String(“study”);
在栈中创建s3,在堆中创建对象"study",s3指向study对象
(4)此时如果String s4 = new String(“study”);
虽然堆中有study对象,但会new一个新"study"对象,s4指向它

4.String的常用方法实例

package com.sutdy.string;

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 定义一个字符串"JAVA 编程 基础"
		String str = "JAVA 编程 基础";
		// 打印输出字符串的长度
		System.out.println("字符串的长度是:" + str.length());// 10(连同空格)

		// 取出字符'程'并输出
		// charAt(int index) 索引
		System.out.println(str.charAt(6));

		// 取出子串"编程 基础"并输出
		System.out.println(str.substring(5));

		// 取出子串"编程"并输出
		// 第二个参数表示该参数索引之前的值(不包括该参数对应的字符)
		System.out.println(str.substring(5, 7));
	}

}

在这里插入图片描述
在这里插入图片描述

package com.sutdy.string;

public class Demo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 定义一个字符串"JAVA编程基础,我喜欢java编程"
		String str = new String("JAVA编程基础,我喜欢java编程");

		// 查找字符'A'在字符串中第一次出现的位置(返回索引值)
		System.out.println("字符'A'在字符串中第一次出现的位置:" + str.indexOf('A'));

		// 查找子串"编程"在字符串中第一次出现的位置
		System.out.println("子串\"编程\"在字符串中第一次出现的位置:" + str.indexOf("编程"));

		// 查找字符'A'在字符串中最后一次出现的位置(返回索引值)(区分大小写)
		System.out.println("字符'A'在字符串中最后一次出现的位置:" + str.lastIndexOf('A'));

		// 查找子串"编程"在字符串中最后一次出现的位置
		System.out.println("子串\"编程\"在字符串中最后一次出现的位置:" + str.lastIndexOf("编程"));

		// 在符串index值为8的位置开始,查找子串"编程"第一次出现的位置
		System.out.println("在字符串index值为8的位置开始,查找子串\"编程\"第一次出现的位置:" + str.indexOf("编程", 8));
	}

}

package com.sutdy.string;

import java.io.UnsupportedEncodingException;

public class Demo3 {

	public static void main(String[] args) throws UnsupportedEncodingException {
		// TODO Auto-generated method stub
		// 字符串和byte数组之间的相互转换
		// 定义一个字符串
		String str = new String("JAVA 编程 基础");
		// 将字符串转换为byte数组,并打印输出
		byte arrs[] = str.getBytes();
		// 如果之后想utf-8编码正常,byte arrs[] = str.getBytes("utf-8");
		for (int i = 0; i < arrs.length; i++) {
			System.out.print(arrs[i] + " ");
		}
		System.out.println();
		// 将byte数组转换为字符串
		String str1 = new String(arrs, "utf-8");
		System.out.println(str1);// JAVA ??? ????

		// 将byte数组转换为字符串
		str1 = new String(arrs);
		// 相当于str1 = new String(arrs, "GBK");
		System.out.println(str1);// JAVA 编程 基础

	}

}

二、equals和"=="的区别

equals:判断字符串中的值是否相同
“==”:判断两个字符串对象是否相同

package com.sutdy.string;

public class Demo4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// ==和equals方法的区别
		// 定义三个字符串,内容都是study
		String str1 = "study";
		String str2 = "study";
		String str3 = new String("study");
		System.out.println("str1和str2的内容相同?" + (str1.equals(str2)));
		System.out.println("str1和str3的内容相同?" + (str1.equals(str3)));

		System.out.println("str1和str2的地址相同?" + (str1 == str2));
		System.out.println("str1和str3的地址相同?" + (str1 == str3));

		// str1和str2的内容相同?true
		// str1和str3的内容相同?true
		// str1和str2的地址相同?true
		// str1和str3的地址相同?false
	}

}

三、字符串的不可变性

package com.sutdy.string;

public class Demo5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// String的不可变性
		// String的对象一旦被创建,则不能修改,是不可变的
		// 所谓的修改其实是创建了新的对象,所指向的内存空间不变
		String s1 = "study";
		s1 = "hello," + s1;
		// s1不在指向"study"所在的内存空间,而是指向了"hello,study"
		System.out.println("s1=" + s1);

		String s2 = "study";
		String s3 = "hello," + s2;
		System.out.println("s2=" + s2);
		System.out.println("s3=" + s3);

		String s4 = new String("hello,study");
		System.out.println("子串:" + s4.substring(0, 5));
		// s4.substring(0,5)存在常量池里
		System.out.println("s4=" + s4);
	}

}

四、字符串StingBuilder和StringBuffer

1.和String区别

String具有不可变性,而StringBuilder不具备

2.建议

当频繁操作字符串时,使用StringBuilder

3.StringBuilder和StringBuffer的区别

(1)二者基本相似
(2)StringBuffer是线程安全的,StringBuilder则不是,所以StringBuilder性能略高

3.StringBuilder常用方法

在这里插入图片描述

4.代码实现

package com.sutdy.string;

public class Demo6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 定义一个字符串"你好"
		StringBuilder str = new StringBuilder("你好");
		// 在"你好"后面添加内容,将字符串编程"你好,java!"
		// str.append(',');
		// str.append("java!");
		// System.out.println("str = " + str);
		System.out.println("str = " + str.append(',').append("java!"));

		// 将字符串编程"你好,JAVA!"
		// 1.使用delete方法删除java,然后插入JAVA
		System.out.println("替换后:" + str.delete(3, 7).insert(3, "JAVA"));
		// 2.使用replace方法直接替换
		System.out.println("替换后:" + str.replace(3, 7, "JAVA"));

		// 在字符串"你好,JAVA!"中取出"你好"并输出
		System.out.println(str.substring(0, 2));
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值