一、String类的特点

1、字符串对象一旦被初始化就不会被改变;

(1)常见问题

  • a
public static void main(String[] args) {
String a = "abc";
a = "nbc";
System.out.println(a);
}

这种不叫作字符串对象改变,只是引用变量a的引用对象发生了改变;真正的“abc”字符串对象并没有改变;

  • b
public static void main(String[] args) {
String a1 = "abc";
String a2 = "abc";
System.out.println(a1==a2);//true
}

结果为true,当然表示a1、a2引用字符串对象的地址是一样的。

原因是:在创字符串对象时,会有一个叫字符串缓冲池来存放创建的字符串对象。每创建字符串对象之前,会先到字符串缓冲池查看是否有这个字符串对象,如果有,直接将字符串缓冲池里的该对象的地址给它;如果没有,才会再进行创建新的字符串对象。

  • c
public static void main(String[] args) {
String a1 = "abc";
String a3 = new String("abc");
System.out.println(a1==a3);//false
}

结果为false,表示a1与a3引用的变量地址不同。

原因是:所有new出来的对象是放在“堆”里面的,而a1引用的变量是放在常量池(字符串缓冲池)的,自然俩者的地址不同、引用的变量不同。

  • d
    public static void main(String[] args) {
String a1 = "abc";
String a3 = new String("abc");
System.out.println(a1.equals(a3));//true
}

String类对equals()方法进行复写,加上了比较俩个字符串内容的功能;这里为true,是因为俩个字符串对象的内容相同;

二、String类的构造函数

1、String s = new String()

(1)三种创建字符串对象的区别

public static void main(String[] args) {
String a1 = new String();//在堆中,创建一个空字符串
String a2 = "";//在字符串缓冲池中,创建一个空字符串
String a3 = null;//引用型变量a3没有引用任何字符串对象
}

2、String s = new String(byte[] bytes);

(1)例子

public static void main(String[] args) {
byte[] arr = {65,66,67,68};
String s1 = new String(arr);//默认以ASCII码表解码
System.out.println(s1);//ABCD
}

(2)指定解码来创建

String s = new String(byte[] bytes,Charset charset);

3、String s = new String(char[] value);

(1)例子

public static void main(String[] args) {
char[] arr = {'a','b','c','d','e','f','g'};
String s1 = new String(arr);//abcdefg
System.out.println(s1);
}

(2)扩展:String s = new String(char[] value,int offset, int count);

参数介绍:

  • char[] value:要进行转换成字符串对象的字符数组;
  • int offset:从哪里开始截取的字符串数组的下标,从0开始;
  • int count:要截取字符串数组的长度;
public static void main(String[] args) {
char[] arr = {'a','b','c','d','e','f','g'};
String s2 = new String(arr, 0, 3);//第一个从0开始,取3个元素
System.out.println(s2);//abc
}

三、String类的常见功能

1、获取

  • 获取字符串的长度

    int length();
  • 获取指定位置的字符

    char charAt(int index);
  • 获取指定字符在该字符串第一次出现的位置

    int indexOf(int ch);

    int indexOf(int ch,int fromIndex);

    int indexOf(String str);

    int indexOf(String str,int fromIndex);

    注意:返回值若为-1,表示该字符在该字符串中不存在;
  • 获取指定字符在该字符串最后一次出现的位置

    int lastIndexOf(int ch);

    int lastIndexOf(int ch,int fromIndex);//从后往前查找

    int lastIndexOf(String str);

    int lastIndexOf(String str,int fromIndex);

    注意:返回值若为-1,表示该字符在该字符串中不存在;
  • 获取字符串的一部分

    String substring(int beginIndex,int endIndex);//从beginIndex到endIndex-1结束;

    String substring(int beginIndex);

    注意:第一个的“从beginIndex到endIndex-1结束”是有原因的;“str.substring(beginIndex,str.length);”与“str.substring(beginIndex)”的功能相同,方便使用而已。

2、转换

  • 将字符串按照正则表达式分割成字符串数组

    String[] split(String regex);
  • 将字符串转化成字符数组

    char[] toCharArray();
  • 将字符串转化成字节数组

    byte[] getBytes();
  • 将字符串中的字母转换成大、小写字母

    String toUpperCase():大写

    String toLowerCase():小写
  • 将字符串内容进行替换

    String replace(char oldch,char newch);

    String replace(String oldstr,String newstr);
  • 将字符串俩端空格去除

    String trim();
  • 将俩个字符串进行连接

    String concat(String addStr);

3、判断

  • 判断俩个字符串内容是否相同

    boolean equals(Object obj);

    boolean equalsIgnoreCase(String str);//忽略大小写比较字符串内容
  • 判断字符串是否包含指定字符串

    boolean contains(String str);
  • 判断字符串是否以指定字符串开头或结尾

    boolean startsWith(String str);

    boolean endsWith(String str);

字符串学习笔记(一)---- String介绍的更多相关文章

  1. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  2. HTML+CSS学习笔记(1) - Html介绍

    HTML+CSS学习笔记(1) - Html介绍 1.代码初体验,制作我的第一个网页 <!DOCTYPE HTML> <html> <head> <meta ...

  3. cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例

    cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...

  4. InterSystems Ensemble学习笔记(一) Ensemble介绍及安装

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  5. Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式

    一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...

  6. JavaSE 学习笔记之String字符串(十四)

    API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源 ...

  7. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  8. Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用

    Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...

  9. MeayunDB学习笔记(一) MeayunDB介绍及安装

    系列目录   MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 ...

随机推荐

  1. NLP自然语言处理入门-- 文本预处理Pre-processing

    引言 自然语言处理NLP(nature language processing),顾名思义,就是使用计算机对语言文字进行处理的相关技术以及应用.在对文本做数据分析时,我们一大半的时间都会花在文本预处理 ...

  2. 幕布,workflowy的使用技巧

    Q: 幕布免费用户导出文档为纯文本或opml: - 将文档Ctrl+C 复制到workflowy: - workflowy可以导出plain-text或opml: 注:已知这样的方法,注释的格式不会被 ...

  3. JAVAEE学习day03,基本的流程控制

    有问题请留言 1.流程控制语句分类 1)顺序控制语句 2)选择结构语句 if... if...else... if...else if... else... for... switch... whil ...

  4. go例子(一) 使用go语言实现linux内核中的list_head

    package list 代码 package list import ( "fmt" ) // 数据接口 type ElemType interface{} // 节点 type ...

  5. 关于ATL生成COM注册失败解决方法

    最近搞C++封装研究了下COM 做最后整理打包的时候发现各种问题引发的注册失败,so整理下备忘. 1.因引用其它动态连接库与你注册的dll不在同一目录下引起的异常.(解决方法将依赖dll放置与注册dl ...

  6. 物联网时代-新基建-ThingsBoard调试环境搭建

    前言 2020开年之际,科比不幸离世.疫情当道.经济受到了严重的损失.人们都不幸的感慨: 2020年真是太不真实的一年,可以重新来过就好了!国家和政府出台了拯救经济和加速建设的利好消息.3月份最热的词 ...

  7. Vysor Pro1.9.3破解,连接 USB 数据线在电脑上远程控制 Android 手机平板/同步显示画面

    Vysor PRO 破解方法 1.下载Vysor Pro,   Vysor Pro下载地址 ,chrome版需要挂梯子. 下载后,能连接,但是清晰度太低,能使用的功能也很少,下面我们就开始来破解它. ...

  8. Selenium IDE安装及简介

    一.Selenium IDE安装 Selenium IDE是Firefox浏览器的一个插件,依附于Firefox浏览器.在网上搜了Selenium IDE的安装教程,大部分都是说在官网下载安装,其实最 ...

  9. sql 语句系列(字符串的遍历嵌入删除与统计)[八百章之第十一章]

    遍历字符串 我觉得首先要提出一个疑问: 一个数据库本身就是用于存储的,遍历字符串究竟有何意义? 先看如何实现的,毕竟sql service 是没有for循环,也没有loop和while的. selec ...

  10. vue你真棒

    引子:什么是前后端分离和前后端不分离? 前后端分离指的是后端开发人员只负责用来书写后端逻辑代码,不用再去管前端页面的搭建,前端人员只负责做好前端页面效果,不用管数据,数据直接向后端人员要,后端和前端通 ...