Java学习笔记(十)String类和StringBuffer类

Java中字符串String类,String类型的底层原理,什么是StringBuffer,StringBuffer类的原理 String、StringBuffer 阅读详情

1. String类和StringBuffer类的区别

(1)String类:创建之后不能再修改和变动的字符串常量

(2)StringBuffer类:创建之后可以修改和变动的字符串变量,即能插入字符,也能追加字符到串尾,StringBuffer类对象的长度是可变的

(3)两个类都被定义为final类型,不能再派生子类。

2. Srting类中的常用方法

equals()方法检查组成的字符串中的内容是否完全一致。注意与“==”的区别,"=="运算符判定两字符串对象是否是同一事例,即它们在内存中的存储空间是否相同。

equalsIgnore()方法忽略大小写方式进行equals比较

toUpperCase():转化为大写

toLowerCase():转化为小写

concat()方法向字符串末尾增加字符串

trim():省略字符串前面的空格和后面的空格,但中间的空格不能去掉。

public int indexOf(int ch);publicint indexOf(String value);搜索第一个出现的字符或字符串

public int lastIndexOf(int ch); publicint lastIndexOf(String value);搜索最后一个出现的字符或字符串

public String subString(int index);       //提取从位置索引开始的字符串部分

public String subString(intbeginIndex,int endIndex);//提取两者之间的字符串,只包含前者,不包含后者

下面的程序为常用方法的使用:

public class Demo01 {
	public static void main(String[] args) {
		String string = " a.b.c.Java";
		
		 int index = string.indexOf(".");
		 System.out.println("第一个点的位置:"+index);
		 
		 int lastIndex = string.lastIndexOf(".");
		 System.out.println("最后一个点的位置:"+lastIndex);
		 
		 int index1 = string.indexOf("d"); System.out.println(index1);
		  
		 int index2 = string.indexOf("a.b"); System.out.println(index2);
		 
		 String str1 = string.substring(2); System.out.println(str1);
		  
		 String str2 = string.substring(1,3); System.out.println(str2);
		 
		 String str3 = string.trim(); System.out.println(str3);
		  
		 //取最后一个字符 
		 String str4 = string.substring(string.length() - 2);
		 System.out.println(str4);
		 
		 String fileName = " a.b.c.java";
		// 检查Java的文件名
		int index0 = fileName.lastIndexOf(".");
		
		if (index0 != -1
				&& index0 != 0
				&& fileName.substring(index0 + 1, fileName.length()).equalsIgnoreCase(
						"Java")) {
			Boolean fileCorrect = true;
			System.out.println("输入的文件名为Java");
		} else {
			System.out.println("输入的文件名无效");
		}
	}
}

运行结果为:

第一个点的位置:2
最后一个点的位置:6
-1
1
.b.c.Java
a.
a.b.c.Java
va
输入的文件名为Java

下面的程序演示字符串中split()方法及字符串比较方法的使用:

public class Demo02 {
	public static void main(String[] args) {
		String words = "长亭外|古道边|芳草碧连天|晚风扶|柳笛声残|夕阳山外山";
		String[] printWord = new String[100];
		System.out.println("******原歌词格式******\n" + words
				+ "\n******拆分后歌词格式******");
		printWord = words.split("\\|");
		
		for(String i:printWord){
			System.out.println(i);
		}
		
		String str1 = "abs";
		String str2 = "aas";
		int flag = str1.compareTo(str2);
		if (flag == 0) {
			System.out.println("str1=str2");
		} else if(flag < 0){
			System.out.println("str1<str2");
		}
		else{
			System.out.println("str1>str2");
		}
	}
}
运行结果为:

******原歌词格式******
长亭外|古道边|芳草碧连天|晚风扶|柳笛声残|夕阳山外山
******拆分后歌词格式******
长亭外
古道边
芳草碧连天
晚风扶
柳笛声残
夕阳山外山
str1>str2

3. 字符串的不变性

(1)字符串的不变性——一旦为字符串分配了内存空间,则字符串对应的值不能发生改变。如str+="**",则相当于又开辟了新的内存空间,原来的指针断开,重新指向新开辟的空间,原来的地址空间就变成了垃圾。因此,忌讳循环中使用字符串的累加。

(2)常量池机制:字符串的不变性机制显然会在String常量内有大量的冗余,JVM留出一段特殊的内存区域,String常量池,定义一个变量时,先在常量池中查找是否存在定义的字符串,如存在,直接将其地址交给变量。

下面的程序说明了equals()和“==”的区别:

public class StringTest {
	public static void main(String[] args) {
		String str1 = "This is the first string";
		String str2 = "This is the first string";
		String str3 = new String("This is the first string");
		String str4 = new String(str1);
		String str5 = str1;
		
		boolean result1 = str1.equals(str2);
		boolean result2 = str1 == str2;
		boolean result3 = str1.equals(str3);
		boolean result4 = str1 == str3;
		boolean result5 = str1.equals(str4);
		boolean result6 = str1 == str4;
		boolean result7 = str1.equals(str5);
		boolean result8 = str1 == str5;
		
		System.out.println("s1 equals s2="+result1);
		System.out.println("s1 == s2="+result2);
		System.out.println("s1 equals s3="+result3);
		System.out.println("s1 == s3="+result4);
		System.out.println("s1 equals s4="+result5);
		System.out.println("s1 == s4="+result6);
		System.out.println("s1 equals s5="+result7);
		System.out.println("s1 == s5="+result8);
	}
}
运行结果为:

s1 equals s2=true
s1 == s2=true
s1 equals s3=true
s1 == s3=false
s1 equals s4=true
s1 == s4=false
s1 equals s5=true
s1 == s5=true


下面的程序演示字符串转化为数组
public class StringToArray {
	public static void main(String[] args) {
		String s = "ABCDE";
		
		//如何把字符串转换为字节数组
		byte b[] = s.getBytes();
		System.out.println("\t"+s);;
		for(int i=0;i<b.length;i++)
			System.out.print("\t"+b[i]);
		System.out.println("");
		
		//如何把字符串转换为字符数组
		char ch[] = s.toCharArray();
		myPrint(ch);
		
		char[] ch1 = new char[3];
		s.getChars(1, 4, ch1, 0);
		myPrint(ch1);
	}
	
	static void myPrint(char[] obj){
		for(int i=0;i<obj.length;i++)
			System.out.print("\t"+obj[i]);
		System.out.println();
	}
}
运行结果为:

ABCDE
65	66	67	68	69
A	B	C	D	E
B	C	D
4. StringBuffer类

(1)系统为String类对象分配内存时,按照对象中所含字符的实际个数等量分配。系统为StringBuffer类对象分配内存时,除去字符所占空间外,再另加16个字符大小的缓冲区

 

(2)StringBuffer类中length()方法返回的是实际的字符串的长度,capacity()方法返回的是实际的字符串长度加上额外的16个字符大小的空间。

下面的两个程序演示StringBuffer的使用:

public class StringBufferDemo {
	public static void main(String[] args) {
		// String分配内存后就成为常量,无法改变
		String s = new String("This is A String");
		StringBuffer sb = new StringBuffer(s);
		System.out.println("s.length() = "+s.length());
		System.out.println("sb.length()"+sb.length());
		System.out.println("sb.capacity()"+sb.capacity());
		sb.deleteCharAt(8); // 删除指定索引处的值
		sb.insert(8, 'a'); // 在指定索引处增加字符

		int ver = 2;
		sb.insert(sb.length(), "BufferDemo")// 插入一个字符串
				.insert(sb.length(), ver);// 插入一个整型值
		System.out.println(sb.toString());

	}
}
运行结果为:

s.length() = 16
sb.length()16
sb.capacity()32
This is a StringBufferDemo2

public class Demo03 {
	public static void main(String[] args) {
		
		String str1 = "java";
		String str2 = "blog";
		String str3 = str1 + str2;
		System.out.println(str3 == "javablog");
		
		String str4 = "java" + "blog";
		System.out.println(str4 == "javablog");
		
		StringBuffer str = new StringBuffer();
		str.append(str1+str2+str3);
		int nStr = Integer.parseInt("2345", 8);
		nStr = Integer.valueOf("1234").intValue();
		
		System.out.println(str);
		System.out.println(nStr);
		
		StringBuilder strTemp = new StringBuilder();
		strTemp.append("hello");
		strTemp.append(123);
		strTemp.append(true);
		System.out.println(strTemp.toString());
		
	}
}
运行结果为:

false
true
javablogjavablog
1234
hello123true


人形机器人专题:人形机器人关节,从Optimus选型看关节的发展 今天分享的是深度研究报告:《(报告出品方:中泰页。 阅读详情

相关推荐

Android dex, odex, oat, vdex, art文件介绍

下图可以简化将Java源转换为OAT的过程: .dex Dalvik虚拟机字节码文件 .vdex 其中包含APK的未压缩DEX代码,以及一些旨在加快验证速度的元数据 .odex .oat // JIT,Just-in-time,即时编译,边运行边编译; // AOT,Ahead Of Time,提前编译,指运行前编译。 其中包含APK中已经过AOT编译的方法代码。 原始DEX文件(例如classes.dex)被转换为另一个包含本机代码的文件。这个新文件通常具有.odex。.oat扩展名,并由ELF格式

he980725866的博客 3620

学习技术的三部曲:WHAT HOW WHY

经过我对周围同事和朋友的观察,大部分感觉自己技术没有提高的人,都仅仅停留在What阶段。下面我把这三个步骤解释一下。 第一步:WHAT 就是搞清楚某个东东是什么?有什么用?有什么语法?有什么功能特性?… 对于学习语言(比如C++、Java、Python),大部分人都能够掌握基本的语法和标准库,然后用它写一些小程序(诸如二分查找、冒泡排序、简单文件操作等)。对于学习类库(比如JDBC类库),...

胡西风的博客 774

国产操作系统应用迁移与适配

了解国产操作系统的背景及意义

2301_77609559的博客 2678

Java new String在idea提示参数冗余、报错解决

该包与java.lang.String包冲突了,所以会报错。原因:idea编辑器自动导入了如下的包。

rose_cold的博客 544

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1754

Converting Phase Noise to Random Jitter(Period)

推导了Phase Noise to Random Jitter(Period)的转换过程,解释了分频对Phase Noise & Spur(每2分频改善6dB)的影响,每N分频,TIE RJ(1𝜎)不变(之前已推导),而Period RJ(1𝜎)增加√N倍。

u010486560的博客 2039

Java之字符串处理(一)

Java之字符串处理 Java中的字符串也是一连串的字符。 在Java中与其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理。 将字符串作为内置的对象处理允许Java提供十分丰富的功能特性以方便处理字符串。   Java语言中,String对象有如下的特性: 当创建一个String对象时,被创建的字符串是不能被改变的。也就是说,一旦一个St

Second的专栏 1880

Labview调用C++ dll之字符串数组传递

做项目的时候碰到了一个需求,有一个复杂的运算,用labview实现非常的麻烦,但是如果用C++实现,就会灵活很多。尝试着采用Labview调用C++编写的动态链接库方式解决,兼顾Labview的便利和C++的灵活性。 运算好说,主要难点是Labview与C++之间的数据对应关系,因为我最后的结果是既有字符串又有数字,对于单纯的数字来说,直接通过调用数组的方式就能解决,这里主要记录一下字符串数组...

bgbgx的博客 6808

java基础 之 String类、StringBuffer类和StringBuilder类

一、String类 1、定义 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 2、创建 创建String字符串的方法两种。无论哪种方法创建的字符串都是不可以改变的。 一般基本数据类型存放在栈中,对象类型存放在堆中。在 Java 中字符串属于对象。 方法一: String s = "fanjingchen"; ...

范璟琛的博客 370

LabVIEW vs Python:谁更适合你的ATE自动化测试系统?实测对比与选型建议

本文深入对比了LabVIEW和Python在ATE自动化测试系统中的性能表现、开发效率和应用场景,帮助工程师根据实时控制需求、数据处理复杂度及团队技能做出最优选型决策。通过实测数据和典型案例,分析两者在硬件集成、系统性能和维护成本等方面的差异,并提供混合架构实施建议。

weixin_29240711的博客 276

使用 MATLAB/Simulink 构建一个 核电站汽轮机与发电机协调控制系统 的仿真模型

在核电机组中,汽轮机-发电机系统是将核能最终转化为电能的关键环节。与火电机组不同,核反应堆的热惯性大、功率调节慢,因此汽轮机的控制策略需与反应堆特性相匹配,实现安全、稳定、高效的能量转换。维持发电机输出功率/频率稳定(响应电网调度)调节汽轮机进汽压力(匹配一回路蒸汽供应)实现“堆-机协调控制”保障机组在启停、变负荷、甩负荷等工况下的安全性本教程将带你使用构建一个核电站汽轮机与发电机协调控制系统汽轮机调速系统(调门控制)建模发电机与电网接口建模(同步机)

xiaoheshang_123的博客 188

String、StringBuffer、Stringbulider的区别

java中用于处理字符串常用的有三个类: java.lang.String java.lang.StringBuffer java.lang.StrungBuilder 三者共同之处: 都是final类,不允许被继承,主要是从性能和安全性上考虑的;防止其中的参数被参数修改影响到其他的应用。 StringBuffer是线程安全,可以不需要额外的同步用于多线程中; StringBuilder是非线...

liuy__257 772

关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本

如何将它翻译成matlab可以使用的矩阵变量,并参与运算。 由于这个大型刚度矩阵125万x125万≈1e12。matlab甚至其他计算软件无法保存这个大的一个矩阵文件。而这个刚度矩阵作为稀疏矩阵其中非零元素的数目只有有500多万。采用sparse稀疏矩阵技术是可以保存。 这里简单介绍一下这个Hypemesh导出的大型刚度矩阵txt文本。如图DMIG开头的标识符是换行符,后面两列是表示这条非零元素在刚度矩阵中列数的信息。我们已经将左边字母和符号等批量删除,得到了右边textread函数可以...

wenyusuran的专栏 1795

java学习笔记(十)----String类和StringBuffer类

***String类和StringBuffer类--------------------------String类对象中的内容一旦被初始化就不能再改变StringBuffer类用于封装内容可以改变的字符串,可以将其它各种类型的数据增加,插入到字符串中,也可以翻转字符串中原来的内容。一旦通过StringBuffer生成了最终想要的字符串,就应该使用StringBuffer.toString方法将其转

宏轩JAVA技术专栏 1685

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

String类和StringBuffer类

String类和StringBuffer类 在应用程序中经常会用到字符串,所谓字符串就是指一连串的字符,它是由许多单个字符连接而成的,如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符。这些字符必须包含在一对双引号" "之内,例如"abc"。在Java中定义了String和SringBuffer两个类来封装字符串,并提供了一系列操作字符串的方法,它们都位在java.lang包中,因此不需要导包就可以直接使用。接下来针对String类和StringBuffer类进行详细讲解。 String类的初始化

xswl2000的博客 2542

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

String类,StringBuffer类以及区别

在Java中,因为String类是final类型的,所以使用String定义的字符串是一个常量,也就是说使用String定义的字符串一旦创建,其内容和长度是不可改变的.为了便于对字符串进行修改,Java提供了StringBuffer类(也成字符串缓冲区)来操作字符串.StringBuffer类和String类最大的区别在于他的内容和长度都是可以改变的.StringBuffer类就像一个字符容器,当在其中添加或删除字符时,操作的都是这个字符容器,因此并不会产生新的StringBuffer对象.

m0_74268079的博客 2284

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java之String类与StringBuffer类

一、String类 1.实例化方式 1)直接赋值法 String str="abc"; String类的设计采用了共享设计模式。在JVM底层实际上会自动维护一个对象池(字符串对象池),如果采用直接赋值法赋值,JVM会先在对象池中查找,如果有,则直接引用;如果没有,则将该实例化对象放到对象池中。 所谓对象池就是一个对象数组。优点:减少内存的开销。 2)构造法 String st...

smell201611010513的博客 1808

二、Java中的String类、StringBuffer类、StringBuilder类

String类、StringBuffer类、StringBuilder类

在校大学生一枚 3184

Java—String类、StringBuffer类和StringBuilder类的使用

在Java中自带针对字符串操作的类,String类、StringBuffer类和StringBuilder类,而这三种类都是针对字符串但也有区别,在本文中则介绍这三种类的区别。String类是jdk自带的字符串类,它是一个字符串常量,长度是不可变的。当你创建字符串时,给定多少个字符就是多少个字符,不允许更改字符串长度。因为String底层使用字符串数组,而该数组使用final修饰,所以它是不可变。

Jun_ID的博客 973

【Java基础】String类、StringBuffer和StringBuilder类

String String类继承了object类,用来描述字符串。Java中定义了String类用来处理字符串,并提供了一系列操作字符串的方法,他们都封装在java.lang包中,因此不需要导入包就可以直接使用。 String类使用了final修饰符,表示该类不可以被重写。 String类是不可改变的,所以你一旦创建了String对象,那它的值就无法改变了。 String s1 = "abc"; // 常量池 String s2 = new String("abc"); //

孙正_大正 4276

Java中的String类与StringBuffer 和 StringBuilder 类的应用

在实际开发中,我们可以根据具体的需求选择合适的类: 如果需要表示一个固定的字符串,可以选择String类。 如果需要在多线程环境中对字符串进行修改,可以选择StringBuffer类。 如果需要在单线程环境中对字符串进行修改,并且对性能有较高要求,可以选择StringBuilder类。

MrxiaoAXiao的博客 1049

String和StringBuffer类的常用方法

在敲代码的时候,我时常忘记一些简单的方法,因此,后续我也会在我的博客中写一些最简单的代码.所以大家不要嫌我太水文章(笑).对于这些方法,我想尽可能的以最简洁的形式给大家分享出来.因为很对时候,我们不是不会用,而是忘了怎么敲.还有一些不了解的新朋友,也可以看一眼就很明了,这就是我写这类博客的初衷.那么废话不多说,我们来看代码.前文有讲过String和StringBuffer类的对比和分析如果大家有需求可以翻看我之前的博客,这里不再赘述了.那么今天的分享就到这里吧.

2301_79175212的博客 1093

Java学习笔记(String类和StringBuffer类)

1.String类的常用操作: public class string { public static void main(String[] args) { //字符串的初始化 String str1=new String();//创建一个空的字符串 String str2=new String("abcd");//创建一个内容为abcd的字符串 char[] char...

kunyuwan的博客 1648

理解String、StringBuffer和StringBuilder类

String、StringBuffer和StringBuilder类

weixin_61898502的博客 1618

Java String类的使用以及和StringBuffer和StringBuilder的区别

Java String类的使用以及和StringBuffer和StringBuilder的区别 目录索引绪论StringStringBufferStringBuilder 绪论 绪论:在Java语言中,为了处理字符串问题,Java提供了String,StringBuffer,StringBuilder三个类来封装处理字符串 String String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁 为什么说String类是不可变类??? 因为St

lidancsdn的博客 862

Java学习——String类和StringBuffer类

Java学习——String类和StringBuffer类1 String类1.1 String类的初始化1.2 String类的常见操作2 StringBuffer类3 String类和StringBuffer类的不同 1 String类 1.1 String类的初始化 1.1.1使用字符串常量直接初始化一个String对象 String str="abc"; 1.1.2使用String的构造方法初始化字符串对象,String类的构造方法如下: 方法声明 功能描述 String() 创建

God_stf的博客 626
上一篇: Java学习笔记(九)Java常用包中的类之Object、Math及数据类型类
下一篇: Java学习笔记(十一)日期日历类和随机类等
mengrennwpu
博客等级 码龄15年 262粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengrennwpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值