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小课之深入字符串上: 比较与拼接相关推荐

  1. 云小课|VMware备份上云学习专列来了,快加入吧~

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:华为云云备份CBR ...

  2. java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置

    给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中  *                 找出 needle 字符串出现的第一个位置 (从0开始).如果不存 ...

  3. java中输出第一个a的的位置,java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置...

    给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中 *                 找出 needle 字符串出现的第一个位置 (从0开始).如果不存在 ...

  4. java map 元素个数_Java 小模块之--统计字符串中元素个数

    Java 小模块之--统计字符串中元素个数 曾经看过我Stream或者Guava类库等文章的小伙伴应该很明白我这篇博文的意义所在了 一是给读者提供综合的博文入口 二是自己也总结一下思路 ps: 之前没 ...

  5. 蓬莱小课:大专生的出路在哪?数据分析岗位用技术和能力说话

    2022年全国毕业生首破1076万大关,专科毕业生占比将近一半. 如此严峻的就业形势下,普通大专生如何实现逆袭. 对于我们这种没背景,没人脉,不富裕,不能收租过日子的大部分普通人而言,如何脱贫致富? ...

  6. java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...

    在逛 Stack Overflow 的时候,发现了一些访问量像喜马拉雅山一样高的问题,比如说这个:如何比较 Java 的字符串?访问量足足有 370万+,这不得了啊!说明有很多很多的程序员被这个问题困 ...

  7. 用集合java字符串第一个单词_Java小程序 输入一个字符串,将每一个单词首字母大写...

    Java 小程序 01 输入一个字符串,将每一个单词首字母大写 1.首先写一个接收传入的单词,并将传入单词首字母大写.这一步比较简单,没什么好说的! private String titleCase ...

  8. form表单刷新_《大胖 ? 小课》- 不用 js 实现文件无刷新上传

    这是<大胖小课>栏目的专题一<说说文件上传那些事儿>的第3节-<不用 js 实现文件无刷新上传> 专题已经更新章节: <大胖 • 小课>- 我是这样理解 ...

  9. java小编程----反转字符串中的每一个单词

    package com.henu.four;public class Test07_3 {// String str= "abc god 中国 java"(较难) 反转每个单词pu ...

最新文章

  1. 数字信号处理中卷积的计算
  2. Oracle Database_buffer_cache大小的设置及依据
  3. 看看这几个版本Linux系统总有一款适合你
  4. java web modules_使用Java web工程建立Maven Web Module工程
  5. [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表
  6. 【JEECG技术博文】JEECG表单配置-树形表单
  7. 设置IDEA显示Services窗口,方面服务启动关停等操作
  8. python 两个列表相互映射_零基础同学,一看就会的Python字典操作指南
  9. 毕设题目:Matlab图像配准
  10. Myeclipse字符集设置
  11. rustdesk:远控工具说明
  12. xrd连续扫描和步进扫描_XRD步进扫描方式和连续扫描方式选择
  13. FFmpeg无损转换ts为mp4
  14. web前端期末大作业:我的家乡广东(html+css布局)div制作
  15. windows安装mmdetection
  16. 数据库sql中S P J SPJ 表的创建
  17. 高分一号数据处理(一):数据下载
  18. 【计算机组成原理】寻址方式
  19. 战列舰机械计算机,Goliath
  20. 共同期待 经典Q版坦克大战揭开神秘面纱

热门文章

  1. D. The Enchanted Forest
  2. 十种具有抗氧化剂的食物
  3. 【观察】神州数码:一体两翼,云程万里
  4. 如何快速重装Win11系统 石大师一键重装Win11教程
  5. 智能电视游戏品牌峰会顺利召开,多款精品TV游戏发布
  6. 雅诗兰黛旗下高端沙龙香水品牌,祖-玛珑推出沉浸式线上香氛体验
  7. 强推!阿里教科书式Java性能调优笔记,竟让GitHub程序员集体叫好
  8. 网站在线偷拍照片源码
  9. 【阿里云生活物联网架构师专题 ②】esp8266 sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
  10. 一生要做的五十件事(三)