String类常⽤⽅法
1、String对象的初始化
由于String对象特别常⽤,所以在对String对象进⾏初始化时,Java提供了⼀种简化的特殊语法,格式如下:
String s = “abc”;
s = “Java语⾔”;
其实按照⾯向对象的标准语法,其格式应该为:
String s = new String(“abc”);
s = new String(“Java语⾔”);
只是按照⾯向对象的标准语法,在内存使⽤上存在⽐较⼤的浪费。例如String s = new String(“abc”);实际上创建了两个String对象,⼀个
是”abc”对象,存储在常量空间中,⼀个是使⽤new关键字为对象s申请的空间。
其它的构造⽅法的参数,可以参看String类的API⽂档。
2、字符串的常见操作
a、charAt⽅法
该⽅法的作⽤是按照索引值(规定字符串中第⼀个字符的索引值是0,第⼆个字符的索引值是1,依次类推),获得字符串中的指定字符。例如:
String s = “abc”;
char c = s.chatAt(1);
则变量c的值是’b’。
b、concat⽅法
该⽅法的作⽤是进⾏字符串的连接,将两个字符串连接以后形成⼀个新的字符串。例如:
String s = “abc”;
String s1 = “def”;
String s2 = s.concat(s1);
则连接以后⽣成的新字符串s2的值是”abcdef”,⽽字符串s和s1的值不发⽣改变。如果需要连接多个字符串,可以使⽤如下⽅法:
String s = “abc”;
String s1 = “def”;
String s2 = “1234”;
String s3 = s.concat(s1).concat(s2);
则⽣成的新字符串s3的值为”abcdef1234”。
其实在实际使⽤时,语法上提供了⼀种更简单的形式,就是使⽤“+”进⾏字符串的连接。例如:
String s = “abc” + “1234”;
则字符串s的值是”abc1234”,这样书写更加简单直观。
⽽且使⽤“+”进⾏连接,不仅可以连接字符串,也可以连接其他类型。但是要求进⾏连接时⾄少有⼀个参与连接的内容是字符串类型。⽽
且“+”匹配的顺序是从左向右,如果两边连接的内容都是基本数字类型则按照加法运算,如果参与连接的内容有⼀个是字符串才按照字符串进⾏连接。
例如:
int a = 10;
String s = “123” + a + 5;
则连接以后字符串s的值是“123105”,计算的过程为⾸先连接字符串”123”和变量a的值,⽣成字符串”12310”,然后使⽤该字符串再和数字5进⾏连接⽣成最终的结果。
⽽如下代码:
int a = 10;
String s = a + 5 + “123”;
则连接以后字符串s的值是”15123”,计算的过程为⾸先计算a和数字5,由于都是数字型则进⾏加法运算或者数字值15,然后再使⽤数字值15和字符串”123”进⾏连接获得最终的结果。
⽽下⾯的连接代码是错误的:
int a = 12;
String s = a + 5 + ‘s’;
因为参与连接的没有⼀个字符串,则计算出来的结果是数字值,在赋值时⽆法将⼀个数字值赋值给字符串s。
c、equals⽅法
该⽅法的作⽤是判断两个字符串对象的内容是否相同。如果相同则返回true,否则返回false。例如:
String s = “abc”;
String s1 = new String(“abc”);
boolean b = s.equals(s1);
⽽使⽤“==”⽐较的是两个对象在内存中存储的地址是否⼀样。例如上⾯的代码中,如果判断:
boolean b = (s == s1);
则变量b的值是false,因为s对象对应的地址是”abc”的地址,⽽s1使⽤new关键字申请新的内存,所以内存地址和s的”abc”的地址不⼀样,所以获得的值是false。
在String类中存在⼀个类似的⽅法equalsIgnoreCase,该⽅法的作⽤是忽略⼤⼩写⽐较两个字符串的内容是否相同。例如:
String s = “abc”;
String s1 =”ABC”;
boolean b = s. equalsIgnoreCase (s1);
则变量b的值是true。
d、indexOf⽅法
该⽅法的作⽤是查特定字符或字符串在当前字符串中的起始位置,如果不存在则返回-1。例如:
String s = “abcded”;
int index = s.indexOf(‘d’);
int index1 = s.indexOf(‘h’);
则返回字符d在字符串s中第⼀次出现的位置,数值为3。由于字符h在字符串s中不存在,则index1的值是-1。
当然,也可以从特定位置以后查对应的字符,例如:
int index = s.indexOf(‘d’,4);
则查字符串s中从索引值4(包括4)以后的字符中第⼀个出现的字符d,则index的值是5。
由于indexOf是重载的,也可以查特定字符串在当前字符串中出现的起始位置,使⽤⽅式和查字符的⽅式⼀样。
另外⼀个类似的⽅法是lastIndexOf⽅法,其作⽤是从字符串的末尾开始向前查第⼀次出现的规定的字符或字符串,例如:
String s = “abcded”;
int index = s. lastIndexOf(‘d’);
则index的值是5。
e、length⽅法
该⽅法的作⽤是返回字符串的长度,也就是返回字符串中字符的个数。中⽂字符也是⼀个字符。例如:
String s = “abc”;
String s1 = “Java语⾔”;
c++string类型int len = s.length();
int len1 = s1.length();
则变量len的值是3,变量len1的值是6。
f、replace⽅法
该⽅法的作⽤是替换字符串中所有指定的字符,然后⽣成⼀个新的字符串。经过该⽅法调⽤以后,原来的字符串不发⽣改变。例如:
String s = “abcat”;
String s1 = s.replace(‘a’,’1’);
该代码的作⽤是将字符串s中所有的字符a替换成字符1,⽣成的新字符串s1的值是”1bc1t”,⽽字符串s的内容不发⽣改变。
如果需要将字符串中某个指定的字符串替换为其它字符串,则可以使⽤replaceAll⽅法,例如:
String s = “abatbac”;
String s1 = s.replaceAll(“ba”,”12”);
该代码的作⽤是将字符串s中所有的字符串”ab”替换为”12”,⽣成新的字符串”a12t12c”,⽽字符串s的内容也不发⽣改变。
如果只需要替换第⼀个出现的指定字符串时,可以使⽤replaceFirst⽅法,例如:
String s = “abatbac”;
String s1 = s. replaceFirst (“ba”,”12”);
该代码的作⽤是只将字符串s中第⼀次出现的字符串”ab”替换为字符串”12”,则字符串s1的值是”a12tbac”,字符串s的内容也不发⽣改变。
j、substring⽅法
该⽅法的作⽤是取字符串中的“⼦串”,所谓“⼦串”即字符串中的⼀部分。例如“23”是字符串“123”的⼦串。
字符串“123”的⼦串⼀共有6个:”1”、”2”、”3”、”12”、”23”、”123”。⽽”32”不是字符串”123”的⼦串。
例如:
String s = “Test”;
String s1 = s.substring(2);
则该代码的作⽤是取字符串s中索引值为2(包括)以后的所有字符作为⼦串,则字符串s1的值是”st”。
如果数字的值和字符串的长度相同,则返回空字符串。例如:
String s = “Test”;
String s1 = s.substring(4);
则字符串s1的值是””。
如果需要取字符串内部的⼀部分,则可以使⽤带2个参数的substring⽅法,例如:
String s = “TestString”;
String s1 = s.substring(2,5);
则该代码的作⽤是取字符串s中从索引值2(包括)开始,到索引值5(不包括)的部分作为⼦串,则字符串s1的值是”stS”。
下⾯是⼀个简单的应⽤代码,该代码的作⽤是输出任意⼀个字符串的所有⼦串。代码如下:
String s = “⼦串⽰例”;
int len = s.length(); //获得字符串长度
for(int begin = 0;begin < len – 1;begin++){ //起始索引值
for(int end = begin + 1;end <= len;end++){ //结束索引值
System.out.println(s.substring(begin,end));
}
}
在该代码中,循环变量begin代表需要获得的⼦串的起始索引值,其变化的区间从第⼀个字符的索引值0到倒数第⼆个字符串的索引值len -2,⽽end代表需要获得的⼦串的结束索引值,其变化的区间从起始索引值的后续⼀个到字符串长度。通过循环的嵌套,可以遍历字符串中的所有⼦串。
h、toCharArray⽅法
该⽅法的作⽤和getBytes⽅法类似,即将字符串转换为对应的char数组。例如:
String s = “abc”;
char[] c = s.toCharArray();
则字符数组c的值为:{‘a’,’b’,’c’}。
i、valueOf⽅法
该⽅法的作⽤是将其它类型的数据转换为字符串类型。需要注意的是,基本数据和字符串对象之间不能使⽤以前的强制类型转换的语法进⾏转换。
另外,由于该⽅法是static⽅法,所以不⽤创建String类型的对象即可。例如:
int n = 10;
String s = String.valueOf(n);
则字符串s的值是”10”。虽然对于程序员来说,没有发⽣什么变化,但是对于程序来说,数据的类型却发⽣了变化。
介绍⼀个简单的应⽤,判断⼀个⾃然数是⼏位数字的逻辑代码如下:
int n = 12345;
String s = String.valueOf(n);
int len = s.length();
则这⾥字符串的长度len,就代表该⾃然数的位数。这种判断⽐数学判断⽅法在逻辑上要简单⼀些。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论