java修炼秘籍第八章:《string类》(代码片段)

Coach_zhang Coach_zhang     2023-01-05     224

关键词:

往期:
JAVA 修炼秘籍第一章:《痛苦的折磨》
JAVA 修炼秘籍第二章:《逐渐魔化》
JAVA 修炼秘籍第三章:《绝地反击》
JAVA 修炼秘籍第四章:《闭关修炼》
JAVA 修炼秘籍第五章:《卧薪尝胆》
JAVA 修炼秘籍第六章:《鏖战》
JAVA 修炼秘籍第七章:《面向对象编程》
JAVA修炼秘籍(番外篇)第一章:《这四道代码题,你真的会吗?》
JAVA修炼秘籍(番外篇)第二章:《图书馆管理系统》


——————————————————————生活以痛吻我,我却报之以歌。


一、String

前言:字符串广泛应用于JAVA编程中,而JAVA中的字符串属于对象,JAVA中创建了String类来操作和创建字符串。

1. 创建字符串

String类有11种构造方法,创建字符串最简单的方式。

		String str="Hello";

遇到"Hello"这个字符串常量时,编译器会使用该值创建一个String对象,和其他对象一样,也可以使用关键字和构造方法来进行创建。如下。

        String str=new String("Hello");
        
        char[] str1='H','e','l','l','o';
        String str2=new String(str1);

String创建的字符串存储在字符串常量池中,而new创建的字符串对象存储在上。

2. 字符串常量池

1. 介绍

  1. 字符串常量池 ——> 常量池 ——> 公共池。
  2. 字符串常量池是通过一个StringTable类实现的,它是一个Hash表默认值大小长度是1009。
  3. 常量池中不存在重复的两个相同的对象。

2. 存储形式

		String str1="Hello";
        String str2="Hello";
        String str3=new String("Hello");
        System.out.println(str1==str2);
        System.out.println(str1==str3);

图解:

  1. str1查看常量池中是否存在"Hello",结果为不存在,则"Hello"会在常量池中存储,str1也就指向常量池中的"Hello";
  2. str2查看常量池中是否存在"Hello",结果为存在,指向常量池中的"Hello";
  3. str3首先会在堆上new一个String类的对象,所以str3的这行代码,产生了两个对象,保存在栈中的str3与在堆上String的对象,String的对象保存的是在常量池中已经存在的"Hello"。
  4. 输出结果为:str1==str2输出true,str1与str2同时指向常量区的"Hello"。
  5. 输出结果为:str1==str3输出false,str3指向的是堆上的对象。

3. String 中‘+’号连接符

1. 介绍

  1. 在JAVA中,字符串对象可以使用‘+’号来与其他对象进行连接。
  2. ‘+’号的连接过程是通过StringBuilder或StringBuffer中的append()方法进行实现的。
  3. 其他对象转换为字符串是通过toString()方法实现的。

2. ‘+’号连接符的运行过程

		String str1="Hello";
        int sum=10;
        String str2=str1+sum;

而实际‘+’连接符背后的方法调用是这样的。

		String str1="Hello";
        int sum=10;
        String str2=((new StringBuffer()).append(str1).append(sum).toString());

3. ‘+’号连接符的速度

  1. 每次进行连接都会隐性new一个StirngBuffer对象,然后调用append,最后再toString返回。
  2. 一般情况下使用不会造成代码效率的降低。
  3. 当循环多次进行‘+’号连接则会造成代码效率的损失。

错误示范

		String str="";
        for (int i = 0; i < 100; i++) 
            str=str+i;
        
        System.out.println(str);

字符串每进行一次连接都会隐式创建一个StringBuffer对象。

4. intern方法

  1. 上面说到,当直接进行双引号声明出来的String对象会直接存储在常量池中。
  2. 而通过new一个String对象,来进行声明的String对象则会存储在堆中。
  3. 不是用双引号声明的String对象,可以使用intern方法。
  4. intern作用是将当前字符串与常量池中已经存在的对象进行比较,如果存在返回当前字符串,如果不存在,将当前字符串存储到常量池中。
		String str2=new String("He")+new String("llo");
        str2.intern();
        String str1="Hello";
        System.out.println(str1==str2);

此时输出结果为true。

5. Stirng中常用的方法

1. int length()

  1. 作用:返回值为int类型,得到一个字符串的字符个数包括(中,英,空格,转义字符,字符)都计入长度。
  2. 实例:
		String str="abcde";
		int len=str.length();
  1. 此时:len=5。

2. char charAt(int index)

  1. 作用:返回当前字符串index位置的字符
  2. 实例:
		String str="abcde";
        char ch=str.charAt(3);
        System.out.println(ch);
  1. 输出:‘d’

3. Stirng subString(int beginIndex)

  1. 作用:从当前字符串中beginIndex位置起到结尾的字符作为一个新的字符串返回。
  2. 实例:
		String str1="abcdef";
        String str2=str1.substring(2);
        System.out.println(str2);
  1. 此时输出:" cdef " ;

4. String subString(int beginIndex,int endIndex)

  1. 作用:从当前字符串中beginIndex位置起到endIndex位置的字符作为一个新的字符串返回。
  2. 实例:
		String str1="abcdef";
        String str2=str1.substring(2,4);
        System.out.println(str2);
  1. 此时输出:" cd " ;

5. int compareTo(String anotherString)

  1. 作用:对当前字符串与参数字符串的内容以字典的顺序进行比较,如果当前字符串大于参数字符串返回>0的数字,反之返回<0的数字,等于返回0;
  2. 实例:
		String str1="abcdef";
        String str2="ABCDEF";
        System.out.println(str1.compareTo(str2));
  1. 此时输出:大于0的数

6. int compareTolgnoreCase(String anotherString)

  1. 作用:与compareTo方法不同于,此方法忽略大小写比较。
  2. 实例:
		String str1="abcdef";
        String str2="ABCDEF";
        System.out.println(str1.compareToIgnoreCase(str2));
  1. 此时输出:0

7. boolean equals(Object anotherObject)

  1. 作用:将当前字符串与参数比较,相等返回true,反之返回false;
  2. 实例:
		String str1="abcdef";
        String str2="ABCDEF";
        System.out.println(str1.equals(str2));
  1. 此时输出:false;

8. boolean equalsIgnoreCase(String anotherString)

  1. 作用:与equals方法不同与,此方法忽略大小写。
  2. 实例:
		String str1="abcdef";
        String str2="ABCDEF";
        System.out.println(str1.equalsIgnoreCase(str2));
  1. 此时输出:true

9. String concat(String str)

  1. 作用:将参数字符串连接到当前字符串的尾部
  2. 实例:
		String str1="abcdef";
        String str2="ABCDEF";
        System.out.println(str1.concat(str2));
  1. 此时输出:" abcdefABCDEF ";

10. int indexOf(int ch或String str)

  1. 作用:查找当前字符串中字符或子串,返回字符或子串在当前字符串中第一次出现的位置,没有返回-1。
  2. 实例:
		String str1="abcdef";
        System.out.println(str1.indexOf(99));
        System.out.println(str1.indexOf("cde"));
  1. 此时输出:2 , 2;

11. int indexOf(int ch或String str , int fromIndex)

  1. 作用:与indexOf一个参数的方法不同于,此方法是从当前字符串的fromIndex位置之后开始查找。
  2. 实例:
		String str1="abcdbc";
        System.out.println(str1.indexOf("bc",3));
  1. 此时输出:4

12. int lastIndexOf(int ch或String str)

  1. 作用:与indexOf一个参数方法不同于,此方法是从当前字符串的尾部向前查找。
  2. 实例:
		String str1="abcdefa";
        System.out.println(str1.lastIndexOf('a'));
  1. 此时输出:6

13. lastIndexOf(int ch或String str , int fromIndex)

  1. 作用:与indexOf两个参数的方法不同于,此方法是从当前字符串的fromIndex位置之前查找。
  2. 实例:
		String str1="abcdefa";
        System.out.println(str1.lastIndexOf('a',4));
  1. 此时输出:0

14. String toLowerCase();

  1. 作用:返回当前字符串中所有字符小写后的新字符串。
  2. 实例:
		String str1="ABCDEFG";
        System.out.println(str1.toLowerCase());
  1. 此时输出:" abcdefg " ;

15. String toUpperCase()

  1. 作用:返回当前字符串中所有字符大后的新字符串。
  2. 实例:
		String str1="abcdefg";
        System.out.println(str1.toUpperCase());
  1. 此时输出:" ABCDEFG ";

16. String replace(char oldChar,char newChar)

  1. 作用:将当前字符串中与参数oldChar字符想匹配的字符全部替换为参数newChar,返回新字符串。
  2. 实例:
		String str1="abadafa";
        System.out.println(str1.replace('a','c'));
  1. 此时输出:"cbcdcfc”;

17. String replaceFirst(String regex,String replacement)

  1. 作用:将当前字符串中第一个与参数regex相匹配的子串替换为参数replacem字符串,后返回新的字符串。
  2. 实例:
		String str1="abadafa";
        System.out.println(str1.replaceFirst("ada","cdc"));
  1. 此时输出:“abcdcfa";

18. String replaceAll(String regex, String replacement)

  1. 作用:将当前字符串中所有与参数regex相匹配的子串替换为参数replacem字符串,后返回新的字符串。
  2. 实例:
		String str1="abadafada";
        System.out.println(str1.replaceAll("ada","cdc"));
  1. 此时输出:“abcdcfcdc”;

19.String trim()

  1. 作用:截取当前字符串两端的空格,对字符串中间空格不做处理
  2. 实例:
		String str1="   aa  aa  ";
        System.out.println(str1.trim());
  1. 此时输出:”aa aa“;

20. Boolean contains(String str)

  1. 作用:判断当前字符串是否包含参数str字符串,包含返回true,不包含返回false;
  2. 实例:
		String str1="XXOO";
        String str2="XX";
        System.out.println(str1.contains(str2));
  1. 此时输出:true;

21.String[] split(String str)

  1. 作用:将参数str作为分割符进行对当前字符串的分割操作,返回类型为字符串数组,保存每一段被分割的字符串。
  2. 实例:
		String str1="aXaXaOaOa";
        String[] str3=new String[10];
        str3=str1.split("X");
        for (String s: str3) 
            System.out.println(s);
        
  1. 此时输出:“aaaOaOa”;

6. 字符串与基本类型的转换

1. 字符串转换为基本类型

parse… 需要转什么类型就在…填写什么类型的包装类。

  1. byte parseByte(String s);
  2. short parseShort(String s);
  3. int parseInt(String s);
  4. long parseLong(String s);
  5. float parseFloat(String s);
  6. double parseDouble(String s);

2.基本类型转换为字符串类型。

String类中提供了String valueOf()方法,用于将基本类型转换为字符串类型。

第八章常用实用类(代码片段)

一、String类String类在java.lang包中,专门处理字符序列,为final类,不可扩展。String常量对象放在常量池中,有自己的引用和实体。String对象放在动态区,可声明和创建对象:Strings=newString("wearestudent");Stringt=newString("wearestudent");对... 查看详情

程序员修炼之道第八章读后感

     第八章是注重实效的项目,主要讨论的是能使项目成功或失败的几个关键因素。主要是组织和管理团队、工作流程自动化、项目测试、编写文档和是使投资人高兴的诀窍等几个方面。首先我明白了要修正那... 查看详情

第八章io类

#include<iostream>#include<fstream>#include<vector>#include<string>#include<algorithm>#include<functional>usingnamespacestd;usingnamespacestd::placeholders;voidbigg 查看详情

第八章章节练习(代码片段)

第一题.错误代码如下  Squaresq=(Square)circle;  原因:对象强制类型转换出错.ClassCastException  去掉错误代码,输出结果为:9.0  12.56  第二题.目录 主代码1packagecom.kgc.zzlx.zhangjie8.zj802;23/**4*测试类5*/6publicclassTest7publicstaticvoi... 查看详情

第八章学习小结(代码片段)

本章学习了排序这一操作,排序方法分为两大类:内部排序:不需要访问外存,分为插入类、交换类、选择类、归并类(2-路归并排序)和分配类(基数排序)。   外部排序:不可能在内存中完成。(一)插入排序1、... 查看详情

第八章小结(代码片段)

排序:(1)内部排序与外部排序内部排序:指待排序记录全部存放在计算机内存中进行排序的过程外部排序:指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。(2... 查看详情

c++从入门到入土第八章:string类的使用

string类的使用string类的文档介绍文章目录string类的使用string类的了解string类创建对象的方式(constructor)析构赋值string对象的访问[]运算符重载at接口backfront迭代器正向迭代器begin/end反向迭代器rbegin/rend范围for与迭代器容量相关接口si... 查看详情

第八章泛型程序设计(代码片段)

为什么要使用泛型泛型的魅力是使程序有更好的安全性和可读性泛型类型限定使用extends关键字限定泛型必须是某个接口的子类,可以有多个类型如TextendsComparable&Serializable,规定限定中至多有一个类,且这个类必须出现在列表的第... 查看详情

java第八章:集合容器之set接口

                      Set接口(唯一,无序(添加顺序))         实现类:HashSet(唯一,无序)                TreeSet(唯一,有序(大小顺序))       ... 查看详情

java面向对象第八章

一、什么是JDBC?      java中连接数据库的一种技术  是java各种应用程序和数据库之间的桥梁  由一组使用java语言编写的类和接口组成二、JDBC中常用的API? DriverManager类:管理不同数据库的jdbc驱动&n... 查看详情

java面向对象第八章

一、什么是JDBC?      java中连接数据库的一种技术  是java各种应用程序和数据库之间的桥梁  由一组使用java语言编写的类和接口组成二、JDBC中常用的API? DriverManager类:管理不同数据库的jdbc驱动&n... 查看详情

扣响c#之门笔记-第八章

8.1以对象为成员1.类的成员不光是可以使int,double等基本类型,也可以是其他类的对象;classProgram{staticvoidMain(string[]args){dated=newdate(1992,5,18,newTime(12,20,5));}}classdate{intyear;intmonth;intday;Timet;//(1)含有其他对象成员的类publicdate( 查看详情

“全栈2019”java第八十八章:接口中嵌套接口的应用场景

...开发环境JDKv11IntelliJIDEAv2018.3文章原文链接“全栈2019”Java第八十八章:接口中嵌套接口的应用场景下一章“全栈2019”Java第八十九章:接口中能定义内部类吗?学习小组加入同步学习小组,共同交流与进步。方式一:关注头条号G... 查看详情

第八章类对象的特性

第八章 类对象的特性面向对象程序设计有4个主要特点:抽象、封装、继承和多态。任何对象都应当具有两个要素,即属性和行为。对象是由一组属性和一组行为构成的。1.类的声明和对象的定义*类是对象的抽象,对象是类... 查看详情

第六周作业(代码片段)

...272018-4《Java程序设计》第六周学习总结教材学习内容总结第八章String类是Java学习中需要掌握的一种基础类StringTokenizer类:构造一个分析器Scanner类:用于解析出字符序列中所需要的数据StringBuffer类:与String类不同的是其对象的实... 查看详情

第八章jvm内存管理

8.1物理内存与虚拟内存8.2内核空间与用户空间8.3在JAVA中哪些组件需要使用内存  8.3.1JAVA堆  8.3.2线程  8.3.3类和类加载器  8.3.4NIO  8.3.5JNI8.4JVM内存结构  8.4.1PC寄存器  8.4.2Java栈  8.4.3堆  8.4.4方法区  8.4.5... 查看详情

使用java实现面向对象编程——第八章fileio

1、文件:文件可认为是相关记录或放在一起的数据的集合;2、File类:名命空间:java.ioFile对象即可表示文件,也可表示目录,在程序中,一个File对象可以代表一个文件或目录,利用他可以用来对文件或目录进行基本操作;  ... 查看详情

第八章io类

IO对象无拷贝或赋值操1.不能拷贝或IO对象赋值2.进行IO操作的函数以引用方式传递和返回流,读写一个IO操作会改变其状态,因此传递和返回的引用不能是const的。  IO库条件状态:srem::iostateiostate是一种机器相关的类型... 查看详情