字符串学习笔记(一)---- String介绍
一、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介绍的更多相关文章
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
- HTML+CSS学习笔记(1) - Html介绍
HTML+CSS学习笔记(1) - Html介绍 1.代码初体验,制作我的第一个网页 <!DOCTYPE HTML> <html> <head> <meta ...
- 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 ...
- InterSystems Ensemble学习笔记(一) Ensemble介绍及安装
系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...
- Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式
一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...
- JavaSE 学习笔记之String字符串(十四)
API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源 ...
- Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)
自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...
- Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用
Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...
- MeayunDB学习笔记(一) MeayunDB介绍及安装
系列目录 MeayunDB介绍-高性能分布式内存数据库 MeayunDB学习笔记(一)MeayunDB介绍及安装 MeayunDB学习笔记(二)批量导入数据 MeayunDB学习笔记(三)索引应用 ...
随机推荐
- webpack知识锦集(一)
ebpack是一个javascript应用吃那个程序的静态模块打包器(module bundler).处理时候会递归构建一个依赖关系图,包含每个模块,将模块打包成一个或者多个bundle. 核心概念: ...
- PHP变量存储结构
首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PHP提供的函数debug_zval_dump刺探得到了本博客所阐述的工作机理.如 ...
- GitHub 热点速览 Vol.11:回暖的 GitHub 迎来上千星的图片流项目
作者:HelloGitHub-小鱼干 摘要:连着两周成绩平平的 GitHub Trending 榜,终于和三月的天气一样进入全面变暖的模式,无论是本周刚开源搭乘 ocr 热点并获得 1,500+ st ...
- 学会了这些redis知识点,面试官会觉得你很nb(转自十年技术大牛)
是数据结构而非类型 很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义.redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们 ...
- HTML实体符号代码
1. 特色的 © © © 版权标志 | | 竖线,常用作菜单或导航中的分隔符 · · · 圆点,有时被用来作为菜单分隔符 ↑ ↑ ↑ 上箭头,常用作网页“返回页面顶部”标识 € € € 欧元标识 ...
- 轻装上阵Flink--在IDEA上开发基于Flink的实时数据流程序
前言 本文介绍如何在IDEA上快速开发基于Flink框架的DataStream程序.先直接上手! 环境清单 案例是在win7运行.安装VirtualBox,在VirtualBox上安装Centos操作 ...
- MVC项目中存储公用链接方法
小白成长记第一篇,随手记录一下小常识 将固定地址写在web.config文件appSettings中 Controller调用方法:
- Flask 请求中间件、错误处理、标签、过滤器、CBV
目录 一.请求中间件 二.请求中间件额外方法(重写源码) 三.请求错误处理 四.请求标签.过滤器 五.CBV写法 基础版 常用版 一.请求中间件 中间件: 1 before_first_request ...
- Vue 学习记录(一)
Vue 研究了一段时间,要学的东西挺多的. 一.基本指令 1.v-text:2.v-html:3.v-pre;4.v-cloak:5.v-once:6.v-if:7.v-else:8.v-else-i ...
- 动态表单数据验证 vue
idCard: [{ validator: (rule, value, callback) => { if (this.idCardVif === 'idCard') { this.valida ...