String类
1、概述
字符串是一个特殊的对象
字符串一旦初始化就不可以被改变
String str = “abc”;
String str1 = new String(“abc”);
String是类,并且类变量为对象。
2、String类特点:
字符串对象一旦被初始化就不会被改变。
字符串存储字符串常量池中,池中没有就建立,池中有就直接指向
String s = "abc";在字符串常量池中创建一个对象
String s1 = new String("abc");创建了两个对象,new了一个字符串对象在堆内存中的。
String s = new String();等效于String s = "";不等效于String s = null;
s.equals(s1);String类中的equals复写了Object中的equals建立了string类自己的判断字符串对象是否相同的依据。
其实就是比较字符串内容。
String类中的public boolean equals(Object anObject)方法将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true。
将字节数组或者字符数组转换成字符串可以用string提供的构造函数来完成,String(byte[] bytes),String(char[] value)
3、按照面向对象的思想对字符串进行功能分类:
*获取:
**获取字符串中字符的个数(长度)
int length();
返回此字符序列的长度
**根据位置获取字符。
char charAt(int index);
返回指定索引处的char值,索引范围为从0到length()-1.
**根据字符获取在字符串中的第一次出现的位置(必须会)
int indexOf(int ch);
返回指定字符在此字符串中第一次出现处的索引。
如果未出现该字符,则返回-1
int indexOf(int ch,int fromIndex);
从指定位置开始查找ch第一次出现的位置,在此对象表示的字符序列中第一次出现的大于或等于fromIndex的字符的索引。
int indexOf(String str);
返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str,int fromIndex);
返回从指定索引开始寻找子字符串第一次出现处的索引index,可以返回位置,也可以作为判断字符或字符串是否存在依据(返回-1表示该字符或字符串不存在)。
**获取字符串中一部分字符串,也叫子串
String substring(int beginIndex,int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的beginIndex处开始,直到索引endIndex-1处的字符。包含begin,不包含end,如果beginIndex为负,或endIndex大于此String对象的长度,或beginIndex大于endIndex时,会抛出IndexOutOfBoundsException异常。该异常指示某排序索引超出范围时抛出。
String substring(int beginIndex);
返回一个子字符串,从指定索引处开始至字符串末尾,在beginIndex为负或大于此String对象的长度时抛出IndexOutOfBoundsException异常。
*转换
**将字符串变成字符串数组(字符串的切割)
String[] split(String regex);
返回字符串数组,它是根据给定的正则表达式的匹配拆此字符串的。其中参数regex为定界正则表达式
**将字符串变成字符数组
char[] toCharArray();
将此字符串转换为一个新的字符数组。
**将字符串变成字节数组
byte[] getBytes(String charsetName)
使用指定的字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。如果指定的字符集不受支持会抛出:UnsupportedEncodingException异常
**将字符串中的字母转成大小写。
String toUpperCase()
将String中的所有字符都转换为大写
String toLowerCase()
将String中的所有字符都转换为小写
**将字符串中的内容进行替换
String replace(char oldch,char newch);
返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。
String replace(String s1,String s2);
**将字符串两端的空格去除
String trim();
返回字符串的副本,忽略前导空白和尾部空白。
*判断
**两个字符串内容是否相同?
boolean equals(Object anObject);
将此字符串与指定的对象比较,当且仅当该参数不为null,并且是与此对象表示相同序列的String对象时,结果才为true。
boolean equalsIgnoreCase(String anotherString);
将此String与另一个String比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。如果参数不为null,且这两个String相等(忽略大小写),则返回true,否则返回false。
**字符串中是否包含指定字符串?
boolean contains(Sting str);
当且仅当此字符串包含指定的char值序列时,返回true
如果此字符串包含str,则返回true,否则返回false。
**字符串是否以指定字符串开头,是否以指定字符串结尾。
boolean startsWith(String prefix);
测试此字符串是否以指定的前缀开始。prefix - 前缀。
如果参数表示的字符序列是此字符串表示的字符序列的前缀,则返回true,否则返回false。
如果参数是空字符串,或者等于此String对象,则返回true。
boolean endsWith(String suffix);
测试此字符串是否以指定的后缀结束。如果参数表示的字符序列是此对象表示的字符序列的后缀,则返回true;否则返回false。注意,如果参数是空字符串,或者等于此String对象,则结果为true。
*比较(必须会)
int compareTo(String anotherString);
按字典属性比较两个字符串。如果参数字符串等于此字符串,则返回值0;如果此字符串按字典顺序小于字符串参数,则返回一个小于0的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于0的值。
int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。根据指定String大于、等于还是小于此String(不考虑大小写),分别返回一个负整数、0或一个正整数。
4、StringBuffer:就是字符串缓冲区;
用于存储数据的容器。字符串的组成原理通过该类实现。
(1)特点:
a、长度是可变的
b、可以存储不同类型的数据
c、最终要转成字符串进行使用。
d、可以对字符串进行修改。
(2)既然是一个容器,应该具备什么功能呢?
a、添加:
StringBuffer append(data);
StringBuffer insert(index,data);
b、删除:
StringBuffer delete(start,end);包含头,不包含尾。
StringBuffer deleteCharAt(int index);删除指定位置的元素。
c、查找:
char charAt(index);
int indexOf(string);
int lastindexOf(string);
d、修改
StringBuffer replace(start,end,String);
void setCharAt(index,char);
增删改查C(create创造)U(update修正)R(read)D(delete)
5、StringBuilder
jdk1.5以后出现了功能和StringBuffer一模一样的对象,就是StringBuilder
不同的是:
StringBuffer是线程同步的,通常用于多线程。
StringBuilder是线程不同步的,通常用于单线程,它的出现提高了效率。
jdk升级:
*简化书写;
*提高效率;
*增强安全性。
基本数据类型包装类
1、概述
为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作
用于描述该对象的类就称为基本数据类型对象包装类。
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
2、常用操作
常用的操作之一:用于基本数据类型与字符串之间的转换。
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
该包装对象主要用于基本类型和字符串之间的转换
(1)基本类型--->字符串
*基本类型数据+""
*用String类中的静态方法valueOf(基本类型数值)//返回该基本类型参数的字符串表现形式
*用Integer的静态方法toString(数据类型)
(2)字符串--->基本类型
*使用包装类中的静态方法 xxx parseXxx("xxx类型的字符串")***********
int parseInt("intString");
boolean parseBoolean("booleanString");
只有Character没有parse方法,
*如果字符串被Integer进行对象的封装,可使用另一个非静态的方法intValue()将一个Integer对象转成基本数据类型值。
JDK1.5以后,简化了定义方式:
Integer x = new Integer(4);可以直接写成Integer x = 4;自动装箱
x = x + 5;自动拆箱。通过intValue方法
注意:在使用时,Integer x = null上面的代码就会出现NullPointerException
jdk1.5以后,自动装箱,如果装箱的是一个字节,那么该数据会被共享不会重新开辟空间。
整数具备不同的进制体现:
十进制-->其他进制
toBinaryString
toOctalString
toHexString
其他进制-->十进制
parseInt("Sting",radix)
自动装箱 简化书写