字符串String
字符串是我们编程最重要的一种类型,远远高于所有的基本数据类型,特别是针
对于输入输出,用户在输入或者接受输出的时候是我们遗失不到的数据类型,那
么他输入的所有东西和接受的所有输出,其实都应该看成字符串。
String是经过专门设计的,他是具有引用数据类型的本质,但是使用上
有可以像基本数据类型一样直接赋值
特点
java当中还设计了StringBuilder \ StrinngBuffer这两个同样表示字符串的类的原因
1、String的常量对象是预加载的,并且每个常量对象被放在一个叫“字符串常量池”的地方
提升了字符串常量的效率
2、String对象的内容不可变,所有的改变都其实都是产生了一个新的String对象
降低了字符串使用的性能
3、java为String设计的大量的API方法,可以帮助我们完成各种各样的功能,掌握的越多越熟练的越好
分类
1、String当中有关数组的方法
1、 String str = new String( "hello" );
char[ ] array = str.toCharArray( );
将字符串中的字符串取出来,以char[ ]d 形式返回
2、 int length = str.length( );
获取字符串的长度
3、 char c = str . charAt(1);
获取字符串读几个位置什么字符,从下标0开始
4、 int index = str.indexOf( 'l' );
获取字符在字符串当中第一次出现的下标位置,如果没有返回 -1
5、 index = str.lastIndexOf( 'l' );
获取字符在字符串中最后出现的位置下标
2、String当中于字符串内容当中的方法
1、 boolean fiag = str.equals( "hello" );
判断字符串内容是否相等
2、 fiag = str.equalsIgnoreCase("Hello");
判断字符串内容在忽略大小写的情况下是否相等
3、 int value = str.compareTo("hello");
判断字符串的大小差值,按字典顺序(先比较第一对字符的差值,如果所有字符都一样,再比较长度)
4、 value = str.compareToIgnoreCase("Hello");
判断字符串之间忽略大小写的差值
5、 str = str.toLowerCase();
把字符串贬称全小写
6、 str = str.toUpperCase();
把字符串全变大写
7、 fiag = str.startsWith("wo");
判断字符串以什么开头,返回boolean值
8、 fiag = str.endsWith("LD");
判断字符串以什么结尾
3、String当中特有的方法
1、trim()
去掉字符串当中的前后空格!用来接收用户输入!
str = " hello worid ";
str = str.trim();
2、subString()
str = "hellowrid";
在字符串当中根据下标截取字符串,包含指定下标
str = str.substring(4);
从指定下标开始截取到指定下标结束,前闭后开
str = str.substring(4,6);
3、replace( )
str = "hellowrld";
字符串内容替换
str = str.replace("l", "f");
把指定字符串替换成另一个字符串
str = str.replace("ff", "fuckyou");
replaceAll功能相当于指定字符串替换成另一个,但是他支持“正则表达式”
str = str.replaceAll("fuckyou", "l");
4、split()
拆分字符串
String date = "2019-5-9";
根据指定的分隔符,对字符串进行拆分,返回字符串数组,他也支持“正则表达式”
String[] strArray = date .split("-");
5、matches()
判断字符串是否满足正则表达式
正则表达式符号:
[ ] : 表示一个字符,括号里面写上字符能够允许添哪些符号
^ : 除了括号里面罗列的,其他都可以
{ } : 表示括号前面规则出现的次数
{m,n} : 最少出现m次 最少出现n次
{m,} : 至少出现m次,多则不限
{m} : 只能出现m次
* : 代表任意次数
+ : 至少一次
? : 0到1次
() : 表示分组,括号内每组内容都可选,每组之间用 ”|“ 分隔
特殊类:
StringBuffer和StringBuilder
StringBuffer和StringBuilder不是String里面的类,有博客重点分析三者的区别,这里只是先提一下:
是专门用来解决大量进行 String的拼接而导致的产生很多String对象问题
StringBuffer
首先出现的是StringBuffer,JDK1.0即提出
StringBuffer与String没有继承关系,所以StringBuffer不能向String一样用“ ” 常量直接赋值,“ ”常量是String类型
“ + “ 号做拼接只支持String,不支持StringBuffer
StringBuffer提供的方法不如String丰富,主要的作用就是做拼接,而他拼接的特点就是不产生新对象,直接是在原对象上做改变
StringBuilder
是一个StringBuffer的补充类,两者的作用与提供方法都是一模一样的,都是用来替代String,完成内容可变的字符串拼接。StringBuilder出现在JDK1.5
区别
StringBuffer是线程同步的,StringBuilder是线程不同步的
所谓同步,是指线程安全性的实现手段
同步表示线程安全,不同步表示不安全;同步会导致线程效率低,不同步表示线程效率高