1、String类概述
String类是Java中专门对字符串进行操作的的类。String类被final所修饰,所以他不可以被继承所以String类中专门操作字符串的方法时不可以被覆写的。在Java 程序中的所有字符串字面值(如 "abc"、"540087")都是该类的具体对象,在双引号内。在日常生活中字符串出现的频率很高,在程序中操作也比较频繁所以String类中的方法要重点掌握。
2、String类的特点
通过查阅API,String类中有很多构造方法 有参数的和空参数的。因为String是一个特殊的类下面通过一个实例讲解:
(1)String s = new String();//该语句创建了一个字符串对象 s
(2)String s1 = " "; //该语句也是创建了一个字符串对象s1 ,因为被双引号引起来的就是一个字符串对象,语句1和语句2的作用是相同的,但语句2更为简单,建议使用语句2创建字符串对象。
(3)String s2 = "abc";//该语句中s2是类类型变量,我们知道类类型变量指向对象,所以谁"abc"是一个字符串对象
(4)s2 = "sfdf"; //语句3和语句4中,对象的内容没有改变,是s2改变了一开始s2指向"abc"语句4执行完后s2指向了"sfdf"。字符串是一个常量也是一个对象。字符串最大的特点:一旦初始化成功就不能被改变。
(5)String s3 = new String("abc");
s2 == s3;结果是false,因为==比较的是内存地址值,因为s2是一个对象而s3是两个对象因为有new
s2.equals(s3);结果是true ,因为String类将Object中的equals方法覆写了,判断的是字符串的内容是否相同
3、String类中的方法
(1) 获取
1.1字符串中包含的字符数,也就是字符串长度
int length( ); 获取长度
1.2根据位置获取该位置上的字符
char charAt(int index);
1.3根据字符获取该字符在字符串中的位置
int indexOf(int ch);//ch 代表ASCII码 并且返回的是ch在字符串中首次出现的位置
int indexOf(int ch,int fromIndex);从指定位置fromIndex开始获取ch在字符串中出现的位置
int indextOf(String str);返回的是str在字符串中第一次出现的位置
int indexOf(String str,int formIndex);从指定位置fromIndex开始获取str在字符串中出现的位置
1.4反向获取(角标不会变只是从后向前查找)
int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引
int lastIndexOf(int ch, int fromIndex) 返回指定字符在字符串中最后一次出现处的位置
int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的位置
1.5 获取子串
String substring(int beginIndex) //从指定位置到结尾,有角标越界异常
String substring(int beginIndex, int endIndex) //包含头不包含尾
(2)判断
2.1 字符串中是否包含某个子串
boolean contains(CharSequence s);//特殊之处indexOf(String str)可以索引str子串第一次出现的位置,如果 返回-1表示该str子串不在字符串中存在,所以也可以对指定字符串判断是否包含,方法是 if(str.indexOf("aa") != -1),而且该方法即可以判断又可获取出现的位置。如果只为判断就用contains(),如果 及判断又拿位置就用 indexOf()进行操作。
2.2 在字符串中是否有内容
boolean isEmpty();原理就是判断长度是否为0
2.3 字符串是否是以指定内容开头
boolean startWith(str);
2.4 字符串是否是以指定内容结尾
boolean endsWith(str);
2.5 判断字符串中内容是否相同
2.6 判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase(String anotherString);
判断文件名:
String str = "ArrayDemo.java";
//判断文件名称中是否是Array单词开头
str.startWith("Array");
//判断文件名称中是否是.java字符串结尾
str.endsWith(".java");
//判断文件中是否包含Demo
str.contains("Demo");
(3)转换
3.1 将字符数组转换为字符串
通过构造函数:String (char [ ] )
String (char[ ],offset起始位,count 个数)//将字符数组中的一部分转成字符串
通过静态方法:String copyValueOf(char[ ]);
String copyValueOf(char[ ],offset起始位,count 个数);
3.2将字符串转成字符数组
char [ ] toCharArray();
3.3 将字节数组转换为字符串
通过构造函数:String (byte [ ] )
String (byte[ ],offset起始位,count 个数)//将字符数组中的一部分转成字符串
3.4 将字符串转成字节数组(在转换过程中是可以指定编码表的)
byte[ ] getBytes();
3.5 将基本数据类型转成字符串
static String valueOf( int );
static String valueOf( double );
3.6 将字符串转成大写或小写
String toUpperCase();//转成大写
String toLowerCase();//转成小写
4.1 String replace(oldChar,newChar);//可以替换一个字符也可以替换一个字符串,如果要替换的字符不存在则 //返回原字符串
(5)切割
5.1 String[ ] split(String regex);//切割之后返回一个字符串数组
eg: String s = "zhangsan,lisi,wangwu";
String [ ] arr = s.split(",");//用逗号对字符串进行切割
(6)去空格 与 比较
6.1 将字符串两端的空格去除
String trim();
6.2 对两个字符串进行自然顺序比较
int compareTo(String anotherString) // 按字典顺序比较两个字符串。
int compareToIgnoreCase(String str) // 按字典顺序比较两个字符串,不考虑大小写
注意:字符串的比较是把字符串从开始到结束的每一位拿出来作比较,具体做法是取出相同位置上的字符做减法运算,如果不为0,则认为两个字符串不相等,把相减的差返回如果字符串按顺序比较完了,且长度相同,则返回 0表示相等如果长度不相同,则返回的是两个字符串长度的差。
因此:
返回值小于0,则左边小于右边
返回值等于0,则左边等于右边
返回值大于0,则左边大于右边
4、字符串练习
class myTrim { public static void main(String[] args) { String s = " abcd "; System.out.println(s); System.out.println(MyTrim(s)); } public static String MyTrim(String str) { int start=0,last=str.length()-1; while(start<=last && str.charAt(start)==' ') start++; while(start<=last && str.charAt(last)==' ') last--; return str.substring(start,last+1); } }
-----------------------------------------------------------------------------------------------------------
5、StringBuffer类
StringBuffer是一个字符串缓冲区,是一个容器,而且长度是可变化的可以操作多个数据类型,最终会通过toString方法变成字符串。
StringBuffer是一个容器,顾名思义容器容器就是装东西的东西,无论往里面装东西还是往外取东西,自己还是个容器,引用毕姥爷的话就是面盆理论。
StringBuffer被初始化后可以改变而String一但初始化就不能被改变。
6、StringBuffer中的方法
容器具备增、删、改、查的特点:
1、存储
StringBuffer append();将指定数据作为参数添加到已有数据结尾处
eg:sb.append("abc").append("true").append("34").append("2.0");//方法调用链
2、插入
StringBuffer insert( int index将要插入的位置,任意数据)//可以将数据插入到指定index位置,注意:角标越界
3、删除
StringBuffer delete(start,end)//删除缓冲区中的内容,包含头不包含尾
StringBuffer deleteCharAt(int indext);//删除指定位置的字符
清空缓冲区原理:
sb.delete(0,sb.length());//从0开始到结尾
4、获取
char charAt(int index);//根据位置获取字符
int indexOf(String str);//根据字符串获取位置
int lastIndexOf(String str);//倒序获取字符串的位置
int length( );//返回长度(字符数)
String substring(int start,int end);//返回子串
5、修改
StringBuffer replace(int start , int end,String)//替换指定位置的字符串,包含头不包含尾
void setCharAt(int index ,char ch)//将指定位置处的字符设置为
ch
6、反转
StringBuffer reverse( );// 将此字符序列用其反转形式取代
7、将缓冲区中指定数据存储到指定字符数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
7、StringBuilder
在JDK1.5版本以后出现了StringBuilder,但StringBuilder和StringBuffer中的方法相同,只不过StringBuffer是线程 同步而StringBuilder线程不同步。如果将StringBuilder的实例用于多个线程是不安全的,如果需要这样的同步建议 用StringBuffer。但在单线程中用StringBuilder。
8、java升级的几个因素
1、提高效率
2、简化书写
3、提高安全性
9、基本数据类型对象包装类
1、在Java中为了操作基本数据类型更加方便高效,Java为我们提供了基本数据类型对象包装类,通过对象包装类我们就能更容易的操作任何一种数据类型,比如整型的最大值、进制问题等等。
2、基本数据类型对应的包装类形式
一般都是首字母大写但是int和char不同,他们的表现形式是Integer和Character
基本数据类型转换成字符串类型
1、基本数据类型 + " ";
2、静态方法:基本数据类型 . toString(基本数据类型值);
eg:Integer . toString(34);//将整型34转换成字符串"34"
3、非静态方法
int intValue( );
字符串转换成基本数据类型
1、常见格式Xxx a = Xxx.parseXxx(String);
eg:int a = Integer . parseInt("123");//如果是"a123"提示数据格式错误,所以必须传入数字格式的字符串
boolean b = Boolean.parse("true");
4、进制转换
十进制转其他进制
static String toBinaryString(int i) //十进制转二进制
以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
static String toHexString(int i) //十进制转十六进制
以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
static String toOctalString(int i) //十进制转八进制
以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
其他进制转十进制
static int parseInt(String s, int radix) //String s代表进制表现形式"3C" int radix代表几进制
eg:parseInt("3C",16);
10、基本数据对象包装类新特性
在JDK1.5版本以后基本数据对象包装类出现了一些新特性:自动装箱和自动拆箱
eg:Integer x = 4;// x是类类型变量所以指向对象,所以该语句隐式将4隐式转换成了Integer即自动装箱
x = x + 4;//此语句中先将x自动拆箱与x进行运算,结果是整型,在自动装箱赋值给x。
在新特性中Integer x中x是引用数据类型所以它还有另一个值即null,在装箱拆箱过程中调用了方法,所以在使用时应先 判断,不为null再进行运算否则会报错误。
相关推荐
黑马程序员__移动商城项目实战 包括黑马程序员乐淘商城实战和慕课React+Antd
公式指标,黑马起爆,有助于判断什么时候可以入手
Java 8是Java语言发展的一个重要里程碑,引入了许多创新性的特性和改进,...黑马程序员的Java8新特性详解笔记和源码提供了深入学习这些概念的资源,结合实际的代码示例,将有助于你更好地理解和掌握Java 8的核心特性。
标题中的“heima_ugo_xiaochengxu_黑马训练营_微信小程序_小程序支付_VantWeapp商城”揭示了这是一个关于微信小程序开发的项目,由黑马训练营提供教学支持,特别关注了商城功能、微信登录和微信支付的集成,并且使用...
《黑马程序员_hibernate框架开发2016版讲义...通过对黑马程序员提供的这门课程的学习,开发者不仅能掌握Hibernate的核心概念和技术,还能提升在实际项目中的数据库操作效率,为构建高效、稳定的Java应用打下坚实基础。
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** JavaWeb是基于Java技术构建Web应用的框架,它包括Servlet、JSP(JavaServer Pages)、JSTL(JavaServer ...
黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.
【青橙电商前台开发02】课程主要涵盖了电商网站前端开发的相关知识,是黑马教育机构...同时,黑马青橙电商的课程通常以实战为导向,让你在实践中学习和成长,所以“好好看吧”,这对你在电商领域的职业发展将大有裨益。
重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip
【标题】"传智播客_黑马_品优购_2018"指的是一个由传智播客和黑马程序员联合推出的2018年品优购相关的IT培训课程资源。这个课程可能涵盖了电子商务、互联网产品开发、运营等多个方面,旨在帮助学员掌握最新的技术和...
"黑马旅游网项目"可能是一个模拟真实旅游网站的示例应用,通过这个项目,学习者可以实践如何构建一个用户可以浏览旅游信息、预订旅行服务的Web平台。基础部分意味着它会涵盖Web开发的基本流程,包括前端页面设计、...
5. **集合框架**:深入学习ArrayList、LinkedList、HashSet、HashMap等常用集合类的内部实现和操作,以及集合的遍历和迭代器。 6. **输入/输出(IO)流**:讲解FileInputStream、FileOutputStream、BufferedReader...
【Java基础源码详解】 Java作为一款广泛应用的编程语言,其基础知识是每一位初学者的必修课。毕向东,作为知名编程教育领域的讲师,他的Java基础教程深受学习者喜爱。这个名为“黑马程序员_毕向东_Java基础源码.rar...
《Hibernate框架深度解析——基于黑马程序员2016版教学资料》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。它通过提供数据持久化的对象模型,使得开发者可以...
2. CSS基础:选择器的使用(如类选择器、ID选择器、元素选择器等),属性(如color、font-family、background-color、padding、margin等),盒模型(content、padding、border、margin),浮动和清除,以及CSS布局...
黑马程序员_ibatis视频教程,仅供参考学习,有需要的可以下载,本人有全栈开发工程师各种学习技术视频教程及本档,有需要的可以留言或到本人账号下载
马程序员_黎活明__Spring如何装配各种集合类型的属性.ppt )
黑马程序员_JDBC视频教程,仅供参考学习,有需要的可以下载,本人有全栈开发工程师各种学习技术视频教程及本档,有需要的可以留言或到本人账号下载
7. **字符串处理**:详细解析String类,包括字符串的创建、操作和比较,以及StringBuilder和StringBuffer的使用。 8. **多线程**:介绍线程的概念,讲解如何创建和控制线程,以及同步机制,如synchronized关键字和...