基础班快要结束了 开始了新一轮的复习,在为考黑马准备。感觉对String类的方法使用起来还是不太熟悉,故整理了一篇总结,愿也能给初学者一些帮助。
String类 1、String对象的初始化 由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下: String s = “abc”;
其实按照面向对象的标准语法,其格式应该为: String s = new String(“abc”); s = new String(“Java语言”); 只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。
2、字符串的常见操作 a、charAt方法 该方法的作用是按照索引值(规定字符串中第一个字符的索引值是0,第二个字符的索引值是1,依次类推),获得字符串中的指定字符。例如: String s = “abc”; char c = s.chatAt(1); 则变量c的值是’b’。 b、compareTo方法 该方法的作用是比较两个字符串的大小,比较的原理是依次比较每个字符的字符编码。首先比较两个字符串的第一个字符,如果第一个字符串的字符编码大于第二个的字符串的字符编码,则返回大于0的值,如果小于则返回小于0的值,如果相等则比较后续的字符,如果两个字符串中的字符编码完全相同则返回0。 例如: String s = “abc”; String s1 = “abd”; int value = s.compareTo(s1); 则value的值是小于0的值,即-1。 c、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”进行连接获得最终的结果。 e、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。 f、getBytes方法 该方法的作用是将字符串转换为对应的byte数组,从而便于数据的存储和传输。例如: String s = “计算机”; byte[] b = s.getBytes(); //使用本机默认的字符串转换为byte数组 byte[] b = s.getBytes(“gb2312”); //使用gb2312字符集转换为byte数组 在实际转换时,一定要注意字符集的问题,否则中文在转换时将会出现问题。 g、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。
|