Java字符串整理笔记(一)
1. 字符串
字符串是由许多个字符连接而成的,Java字符串可由任何字符组成,但这些字符必须包含在一对“ “” ”(双引号)之内。Java使用java.lang包中的类来创建字符串,因此字符串是一个String类
的实例对象。
1.1. 字符串常量
在Java中由" "" "包含的多个字符都是字符串,不能做为其他类型使用,例如,“20+30”永远不能等于50,因为它是字符串常量而不是整数。
1.2. 声明字符串变量
其语法格式为:String str [=null];
注意:一个Java对象(字符串也是Java对象)必须先初始化,然后才能使用,否则编译器会报告"使用的变量未初始化"的错误。
1.3. 创建字符串
示例代码如下:
String str="您好";
将“您好”字符串常量直接赋值给str变量,这样str变量就被初始化并可以使用了。
String类的常用构造方法有以下两种:
1.3.1. String()构造方法
这个方法可以创建新的字符串对象,该构造方法是字符串类的默认构造方法,不接收任何参数,构造的对象是一个空字符串。其语法如下:
new String();
其中,“new”是Java语法的关键字,用于创建关键字之后所指定的类的实例对象。
注意:一个空字符串并不是说它的值等于null(空值),空字符串和null(空值)是两个概念。空字符串是由空的“ “” ”符号定义的,它是实例化之后的字符串对象,但是不包含
任何字符。比如:“A”+new String()+"b" ,执行后其结果为:“Ab”。而null(空值)并不是字符串的实例对象,它是一个常量,只是不包含任何东西而已,如数字、字符,更不是空字符串。
比如:"a"+null+"b" ,执行后其结果是:"anullb"。可以看到,null(空值)和字符串相连被转换成了字符串"null",否则它什么都不是。
1.3.2. String(byte[] bytes)构造方法
该构造方法将使用当前平台的默认字符集解码和指定的byte数字(字节数字)构造一个新的字符串,新的字符串的长度不一定等于byte数字的长度。
语法如下:
new String(byteArray);
演示实例1.1如下:
public class ByteArray { public static void main(String[] args) { // TODO Auto-generated method stub byte[] byteArray=new byte[] {65,66,67}; //创建字节数组 String str = new String(byteArray); System.out.println(str); }
实例1.1执行的结果为:ABC
1.3.3. String(byte[] bytes,String charsetName)构造方法
该构造方法使用一个指定的charsetName编码格式和指定的byte字节数组构造一个新的字符串。其语法如下:
new String(byteArray,charsetName); //byteArray:字节类型的数组 //charsetName:字符编码格式,如“GB2312”
1.3.4. String(char[] value)构造方法
该构造方法使用一个字符串数组构造一个新的字符串。新的字符串是字符数组中所有元素连接的结果。其语法格式如下:
new String(charArray) ; //charArray:字符类型的数组
实例1.2演示如下:
public class CharArray { public static void main(String[] args) { // TODO Auto-generated method stub char[] charArray=new char[] {'E','F','D'}; //创建字符数组 String str; str=new String(charArray); System.out.println(str); }
实例1.2执行结果为:EFD
1.3.5. String(StringBuffer buffer) 与 String(StringBuilder builder)构造方法
这两个构造方法都可以生产字符串,其中,前者生产字符串的内容是StringBuffer(缓冲字符串)对象缓冲区中的所有内容,而后者是由StringBuilder(字符串生成器)生成的可变字符号。
2. 字符串连接
2.1. 字符串与字符串连接
2.2. 字符串与其他类型数据的连接
2.2.1. 字符串与基本类型的数据连接
如果和字符串连接的是int、float、double、boolean、long、char等基本类型的数据,那么可以直接将这些数据转变成字符串,然后再进行字符串连接。
实例1.3演示的是字符串、整数、浮点数连接成一个字符串代码如下:
public class LinkIntStrFloat { public static void main(String[] args) { // TODO Auto-generated method stub int pearNum=10; float price=2.3f; String str="我有"+pearNum+"个梨子,每个梨子花费"+price+"元钱。"; System.out.println(str); //在控制台输出字符串变量 }
实例1.3执行结果为:我有10个梨子,每个梨子花费2.3元钱。
2.2.2. 字符串和对象连接
Java语言中所有的类都是Object类的子类,他们直接或间接地继承了Object类的方法,其中包括toString()方法,这是一个将对象转变成字符串的方法,因此在字符串连接对象时(即某个类的实例对象),
将调用这个对象的toString()方法,从而使对象转变成字符串,然后再执行连接操作。
实例1.4演示代码如下:
public class Pear { private String name; public String getName() { return name; } public void setName(String name) { //设置名称的方法 this.name=name; } public String toString() { String str="我是一个梨子,我的名字叫"+name; return str; } }
public class LinkObject { public static void main(String[] args) { // TODO Auto-generated method stub Pear object=new Pear(); //创建梨子对象 object.setName("茄子"); System.out.println("Hello,"+object); } }
实例1.4执行结果如下图所示:
3. 字符串操作
3.1. 字符串比较
3.1.1. equals()方法和equalsIgnoreCase()方法
String类的equals()方法用于比较两个字符串是否相等。由于字符串是对象类型,所以不能简单地用“==”(双等号)判断两个字符串是否相等,二需要使用equals()方法比较两个对象的内容。
其语法格式为:
boolean equals(String str); //str:要作比较的字符串对象。 //boolean:返回的值,如果和String相等则返回true,否则返回false。
注意:equals()方法比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”双等号操作符比较两个对象,则比较的是两个对象的内存地址,所以他们不相等(即使内容相同,不同对象的内存
地址也是不相同的)。
当使用equalsIgnoreCase()方法比较两个字符串时,字母A~Z和字母a~z是一样的,这就是与equals()方法的区别。
3.1.2. regionMatches()方法
该方法将一个字符串中指定长度的子字符串和另一个字符串中的子字符串进行比较,它有两个重载方法。
3.1.2.1. 区分字母大小写的重载方法,语法如下:
regionMatches(toffset,other,ooffset,len) //toffset:此字符串对象的子字符串开始处的索引号 //other:要比较的字符串 //ooffset:要比较的other字符串中子字符串开始处的索引号 //len:要比较的子字符串的长度
3.1.2.2. 指定字母大小写对比方式的重载方法,与上方法类似,只是多了ignoreCase参数。语法如下:
regionMatches(ignoreCase,toffset,other,ooffset,len) //ignoreCase:对比方式,如果为true,则比较时忽略大小写 //其他参数同regionMatches()方法的参数
3.1.3. startsWith()方法和endsWith()方法
startsWith()方法判断一个给定的字符串是否以指定的字符串开始。如果以指定的字符串开始,则返回true;语法如下:
startsWith(str) //str:作为前缀的字符串
endsWith()方法判断一个给定的字符串是否以指定的字符串结束。如果以指定的字符串结束,则返回true;语法如下:
endsWith(str) //str:作为后缀的字符串
例如:字符串“How are you”以“How”字符串开始,以"you"字符串结尾,下面代码执行的结果都为true;
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub String str="How are you"; boolean l; l=str.startsWith("How"); System.out.println(l); l=str.endsWith("you"); System.out.println(l); } }
3.1.4. compareTo()方法
该方法用于判断一个字符串是大于、等于还是小于另一个字符串。判断字符串大小的依据是根据他们在字典中的顺序决定的。语法如下:
int compareTo(String str) //str:要比较的String
若该字符串等于str字符串,则返回0;若该字符串按字典顺序小于参数字符串,则返回值小于0;若该字符串按字典顺序大于参数字符串,则返回值大于0.
3.2. 获取字符串的长度
字符串是一个对象,在这个对象中包含length属性,它是该字符串的长度。使用String类中的length()方法可以获取该属性值。语法如下:
str.length(); //str:一个字符串对象
例如,要获取字符串"How are you"长度的操作代码如下:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub String str="How are you"; int l=str.length(); System.out.println(l); } }
输出的字符串长度是11。
3.3. 字符串转换
3.3.1. toLowerCase()方法
该方法是将字符串转换为小写格式。语法如下:
str.toLowerCase() //str:一个字符串对象
3.3.2. toUpperCase()方法
该方法是将字符串转换为大写格式。用法同上。
3.4. 字符串查找
3.4.1. indexOf(int ch)方法
该方法用于获取字符串中指定字符第一次出现处的索引,若字符没有出现则返回-1。语法如下:
str.indexOf(ch) //ch:要索引的字符 //str:一个字符串对象
3.4.2. lastIndexOf(int ch)方法
该方法让用户获取字符串中指定字符最后一次出现处的索引,若字符没有出现则返回-1。语法如下:
str.lastIndexOf(ch) //ch:要搜索的字符 //str:一个字符串对象
3.4.3. indexOf(String str)方法
该方法用于获取字符串中指定的子字符串首次出现的索引位置,如果子字符串作为该字符串的子字符串出现,则返回该子字符串的第一个字符串的索引,如果没有作为一个子字符串出现则返回-1。
语法如下:
str.indexOf(substr) //substr:搜索的字符串 //str:一个字符串对象
3.4.4. lastIndexOf(String str)方法
该方法用于获取字符串中指定的子字符串最后一次出现的索引位置。如果子字符串作为字符串的一个子字符串出现了一次或多次,则返回最后一次出现该子字符串的第一个字符的索引,
若没有作为一个子字符串出现则返回-1。语法如下:
str.lastIndexOf(substr) //substr:搜索的子字符串 //str:一个字符串对象
3.4.5. indexOf(int ch,int startIndex)
该方法根据指定搜索起点,搜索指定字符首次出现的位置。语法如下:
indexOf(ch,startIndex) //ch:要搜索的字符 //startIndex:开始查找位置的索引
3.4.6. lastIndexOf(ch,startIndex)方法
该方法根据指定的搜索起点,搜索指定字符最后一次出现的位置。语法如下:
int lastIndexOf(ch,startIndex) //ch:要搜索的字符 //startIndex:开始查找位置的索引
3.4.7. indexOf(String str,int startIndex)方法
该方法根据指定的搜索起点,搜索指定字符串首次出现的位置。语法如下:
indexOf(str,startIndex) //str:要搜索的子字符串 //startIndex:开始查找位置的索引
3.4.8. lastIndexOf(String str,int startIndex)方法
该方法根据指定的搜索起点,搜索子字符串最后一次出现的位置。语法如下:
lastIndexOf(str,startIndex) //str:要搜索的子字符串 //startIndex:开始查找位置的索引
实例1.5演示字符串的各种搜索方法,代码如下:
public class StrSearch { public static void main(String[] args) { // TODO Auto-generated method stub String str="zhongxinxiaoxue"; //创建字符串 int rs=str.indexOf('n'); //查找字符n第一次出现的索引位置 System.out.println("字符n首次出现的位置是:"+rs); rs=str.lastIndexOf('x'); //查找字符x最后一次出现的索引位置 System.out.println("字符x最后一次出现的位置是:"+rs); rs=str.lastIndexOf("xin"); //查找字符xin最后一次出现的索引位置 System.out.println("字符xin最后一次出现的位置是:"+rs); rs=str.lastIndexOf('o',5); //查找从第六个字符开始,字符o首次出现的索引位置 System.out.println("从第六个字符开始,字符o首次出现的位置是:"+rs); } }
实例1.5执行的结果如下图所示: