Java小课之深入字符串上: 比较与拼接
1.1String类
String是我们平时学习用到最多的一个类,需要声明一个字符串变量时就用到了String类·
笙囧举个栗子
String str;
下面是创建字符串对象时间
直接给String赋予字面意思即可
String str ="笙囧同学爱学习";
当然啦,我们也可以用new关键字来创建一个String对象
就像这个亚子
String str = new String("笙囧同学爱学习");
另外笙囧给大家普及一下,String类拥有十多种重载的构造方法,有感兴趣的友友可以参看String类的API文档。
参看的过程中可能有朋友会发现,String类的声明为final,这个是什么意思腻
这意味着这个类不可继承,从这个里面我们就可以了解到Java把String类作为一个标准的字符串操作类。
1.2 == 运算符和equals方法
在Java中,我们时常会见到==的身影,这个关系运算符的作用是什么呢,来来来铁铁们,我们先一起看个小栗子。
public class string { public static void main(String[] args) {String str1= "abc";String str2="abc";if (str1 == str2) {System.out.println("str1与str2相等");}else {System.out.print("str1与str2不相等");}}}
来来来,别看下面的文字,只看代码区,盲猜它的作用
(已经过去了3分钟......)
怎么样铁铁萌,你应该已经体会到了==运算符的作用了吧。
没错,==运算符就是用来比较两个操作数是否相等
让我们把程序运行一下,来看看效果
我们可以发现,结果很完美。
因为都是字符串的比较,相等理所当然,那么,如果两个变量类型不同,结果会是怎么样呢?
说干就干,一起来试试吧
public class string { public static void main(String[] args) {String str1 = new String("abc");String str2= new String("abc");;if (str1 == str2) {System.out.println("str1与str2相等");}else {System.out.print("str1与str2不相等");}}}
在这里我们直接用new关键词来构建两个变量,大家可以猜猜运行结果是什么
下面是运行结果
好了,神奇的事情发生了,两个String对象的内容相同,为什么电脑显示结果互不相等呢?
下面敲黑板,笙囧课堂开课啦,大家搬好小板凳,认真听哦。
首先我们要明确一点,在Java中,boolean,byte,short,int,long,char,float,和double是基本数据类型,其他的都是引用类型。
咳咳,什么意思呢
这就意味着,所有的对象类型都是引用类型!!!
其次,Java中所有的字符串都是String类型的对象,包括字符串字面变量,这也就意味着,“abc”是一个对象
最后,==运算符比较两个变量的值是否相等。
好了,集齐了这三个条件,可以召唤神龙,咳咳不对,是进行科学理智的分析
在分析的开始,笙囧要解释一下Java编译器在遇到String对象时的工作流程,
当遇到一个变量赋值一个常量时,编译器会首先在常量池中寻找是否已经存在该常量,如果存在,该变量会直接引用赋值,如果不存在,编译器会在常量池中分配空间并储存该常量,然后再将该常量赋值给变量。
铁铁萌可以把这个流程用自己的语言说出来吗?
也就是是,编译器会把在程序中出现的相同内容类型的常量看作同一个对象,对于对象类型的变量,其值就是引用值,我们也可以理解为是对象的地址。
好了,知道了这个知识,让我们来康康下面两行代码
String str1="abc";
String str2="abc";
我们已经可以知道,这两个对象比较的结果是相等的
==运算符用于比较两个引用类型的变量时,比较的便是他们的引用值是否相等,通过上面的分析,我们已经知道,str1和str2指向的是同一个对象,所以比较的结果便是相等的。
那么,为什么下面的不相等呢?
String str1=new String("abc");
String str2=new String("abc");
我们来分析一下当输入·这个代码时,计算机做了什么事情
当输入第一句代码时,计算机在常量池中先分配内存并储存字符序列,接着,new运算符要构造一个String类型的对象,然后,用常量池中的字符串对象的内容在堆上构建一个新的String对象,将新对象的赋值给str1,第二句代码也是同样的过程。
也就是说,两个new操作在堆上产生了两个不同的对象,str1和str2指向的是不同的对象,他们的引用值自然是不同的,结果自然不相等。
好了,咳咳,到了问题时间
上面两行代码产生了几个String对象腻?
各位铁铁萌可以思考思考
3 minutes later
来来来,笙囧揭晓答案辣
一共产生了三个对象,其中一个“abc”对象,两个new操作创造了两个对象。
那么,说了这么多,我们知道了什么东东呢?
当我们声明一个引用对象时,系统只为该变量分配了引用空间,并没有创建一个具体的对象,当用new为对象分配空间后,将对象的引用赋值给变量
好了,累死老夫了,终于终于图穷匕见了哈哈哈嗝。笙囧可以溜了...吗?
可是,可能有铁铁还要问,如果我只想用==去比较两个对象的内容是否相等怎么办?
哦哦哦,很好少年郎,你已经get到了又一个关键点,笙囧表示很欣赏你哈哈哈嗝。
下面又是一个小知识,大家拿好自己的小本本哦
在Java中,所有的对象都有一个共同的基类:Java.lang.object
在这个类中定义了一个方法equals,用于与另一个对象进行相等性判断,如果相对,则返回true,否则返回false。因为Object中的equals方法只有在两个引用值指向同一个对象时才返回为真,所以不能直接用Object中的equals方法,不然就和==运算符 样了。一般都是子类重写Object类的equals方法,提供自己的比较逻辑,而String类作为Objecter的子类,就重写了equals 方法,用于比较字符串对象内部所存储的字符序列是相等,也就是说,可以用String类的equals方法来比较两个字符串对象的内容是否相等。
哈哈哈,是不是有点晕,让我们康康代码冷静一下
public class string { public static void main(String[] args) {String str1 = "abc";String str2 = new String("abc");String str3 = new String("abc");;if (str1.equals(str2) ){System.out.println("str1与str2的内容一致");}else {System.out.println("str1与str2的内容不一致");}if (str2.equals(str3) ){System.out.println("str2与str3的内容一致");}else {System.out.println("str2与str3的内容不一致");}}}
compareTo方法
public class string { public static void main(String[] args) {String str1 = "abc";String str2 = "abf";String str3 = new String("abc");System.out.println(str1.compareTo(str2));System.out.println(str2.compareTo(str1));System.out.println(str1.compareTo(str3));}}
三,字符串拼接
public class string { public static void main(String[] args) {String world ="World";String res = "Hello";res = res.concat(world);res = res.concat("!");System.out.println(world+res);}}
public class string { public static void main(String[] args) {String str = "abc";int i=3;float f =4.5f;char ch = 'a';boolean b = true;System.out.println(str+i+f+ch+b);}}
9.5 操作字符串
9.5.1 获取字串符长度
public class string { public static void main(String[] args) {String str = "Vue.js 从入门到实战";System.out.println(str.length());}}
public class string { public static void main(String[] args) {String str = "Hello World";System.out.println(str.indexOf('o'));System.out.println(str.indexOf('o',5));System.out.println(str.indexOf("World"));System.out.println(str.indexOf("Welcome"));}}
public class string { public static void main(String[] args) {String str = "Hello World";System.out.println(str.lastIndexOf('o'));System.out.println(str.lastIndexOf('o',5));System.out.println(str.lastIndexOf("World"));System.out.println(str.lastIndexOf("Welcome"));}}
9.5.3 判断字符串的开始和结尾
public class string { public static void main(String[] args) {String str = "笙囧同学.java";System.out.println(str.startsWith("笙囧"));System.out.println(str.endsWith(".java"));}}
9.5.4 获取指定索引位置的字符
public class string { public static void main(String[] args) {String str = "Hello";int len = str.length();char[] chArr =new char[len];for(int i=0;i<len;i++) {chArr[i] = str.charAt(i);}System.out.println(chArr);}}
9.5.5 截取子字符串
public class string { public static void main(String[] args) {String str = "Hello World";System.out.println(str.substring(6));System.out.println(str.substring(6,10));}}
public class string { public static void main(String[] args) {String str = "Will Smith";int index= str.indexOf("Smith");if(index != -1)System.out.print(str.substring(index,index + "Smith".length()));}}
9.5.6 分割字符串
public class string { public static void main(String[] args) {String str = "Sheng,Jong,Tong,Xue ";String[] names = str.split(",");for(String name : names) {System.out.println(name);}}}
9.5.7 替换字符或字符串
public class string { public static void main(String[] args) {String str1 = "笙囧同学在搬砖";System.out.println(str1.replace('在','6'));String str2 = "给个关注球球了";System.out.println(str2.replace("球球","*"));}}
public class string { public static void main(String[] args) {String str = "笙囧同学在搬砖在搬砖";System.out.println(str.replaceFirst("搬砖","学习"));System.out.println(str.replaceAll("搬砖","学习呀"));}}
9.5.9 合并字符串
public class string { public static void main(String[] args) {String strs = String.join(",", "笙囧同学","好难过","姥爷们","给点温暖","的抱抱");System.out.println(strs);}}
2.9 重复字符串
public class string { public static void main(String[] args) {String str = "笙囧同学加油";System.out.println(str.repeat(3));}}
2.10 大小写转换
public class string { public static void main(String[] args) {String str = "Sheeng Jong Tong Xue ";System.out.println(str.toLowerCase());System.out.println(str.toUpperCase());}}
2.11 去除字符串首尾空白
public class string { public static void main(String[] args) {String str = "SheengJongTongXue\n ";System.out.println(str);System.out.println(str.trim());}}
2.12 判断字符串是否为空
public class string { public static void main(String[] args) {String str = "\t \n ";System.out.println(str.isEmpty());System.out.println(str.isBlank());}}
2.13 提取字符串的行流
import java.util.stream.Stream;public class string { public static void main(String[] args) {String str = "Sheng\nJong\rTong\r\nXue";Stream<String> stream = str.lines();stream.forEach(subStr -> System.out.println(subStr));}}
2.14 与字节数组相互转换
import java.util.stream.Stream;public class string { public static void main(String[] args) {byte[] buf= new byte[] {97,98,99};String str = new String(buf);System.out.println(str);buf = str.getBytes();for(int i=0;i<buf.length;i++) {System.out.print(buf[i] + "\t");}}
}
Java小课之深入字符串上: 比较与拼接相关推荐
- 云小课|VMware备份上云学习专列来了,快加入吧~
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:华为云云备份CBR ...
- java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中 * 找出 needle 字符串出现的第一个位置 (从0开始).如果不存 ...
- java中输出第一个a的的位置,java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置...
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中 * 找出 needle 字符串出现的第一个位置 (从0开始).如果不存在 ...
- java map 元素个数_Java 小模块之--统计字符串中元素个数
Java 小模块之--统计字符串中元素个数 曾经看过我Stream或者Guava类库等文章的小伙伴应该很明白我这篇博文的意义所在了 一是给读者提供综合的博文入口 二是自己也总结一下思路 ps: 之前没 ...
- 蓬莱小课:大专生的出路在哪?数据分析岗位用技术和能力说话
2022年全国毕业生首破1076万大关,专科毕业生占比将近一半. 如此严峻的就业形势下,普通大专生如何实现逆袭. 对于我们这种没背景,没人脉,不富裕,不能收租过日子的大部分普通人而言,如何脱贫致富? ...
- java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...
在逛 Stack Overflow 的时候,发现了一些访问量像喜马拉雅山一样高的问题,比如说这个:如何比较 Java 的字符串?访问量足足有 370万+,这不得了啊!说明有很多很多的程序员被这个问题困 ...
- 用集合java字符串第一个单词_Java小程序 输入一个字符串,将每一个单词首字母大写...
Java 小程序 01 输入一个字符串,将每一个单词首字母大写 1.首先写一个接收传入的单词,并将传入单词首字母大写.这一步比较简单,没什么好说的! private String titleCase ...
- form表单刷新_《大胖 ? 小课》- 不用 js 实现文件无刷新上传
这是<大胖小课>栏目的专题一<说说文件上传那些事儿>的第3节-<不用 js 实现文件无刷新上传> 专题已经更新章节: <大胖 • 小课>- 我是这样理解 ...
- java小编程----反转字符串中的每一个单词
package com.henu.four;public class Test07_3 {// String str= "abc god 中国 java"(较难) 反转每个单词pu ...
最新文章
- 数字信号处理中卷积的计算
- Oracle Database_buffer_cache大小的设置及依据
- 看看这几个版本Linux系统总有一款适合你
- java web modules_使用Java web工程建立Maven Web Module工程
- [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表
- 【JEECG技术博文】JEECG表单配置-树形表单
- 设置IDEA显示Services窗口,方面服务启动关停等操作
- python 两个列表相互映射_零基础同学,一看就会的Python字典操作指南
- 毕设题目:Matlab图像配准
- Myeclipse字符集设置
- rustdesk:远控工具说明
- xrd连续扫描和步进扫描_XRD步进扫描方式和连续扫描方式选择
- FFmpeg无损转换ts为mp4
- web前端期末大作业:我的家乡广东(html+css布局)div制作
- windows安装mmdetection
- 数据库sql中S P J SPJ 表的创建
- 高分一号数据处理(一):数据下载
- 【计算机组成原理】寻址方式
- 战列舰机械计算机,Goliath
- 共同期待 经典Q版坦克大战揭开神秘面纱