Java API|java.lang.String 类|java.lang.StringBuffer 类&java.lang.StringBuilder 类|

1 java.lang.String

1.1 String对象的创建

  • String类在底层其实是一个不可变长度的字符数组.
 /** The value is used for character storage. */
    private final char value[];
  • String的三种创建方式

方式一:

char[] value = new char[]{'a', 'b', 'c'};
String s = new String(value);

这种方式的String类型变量s 指向的是一个存放在堆中的String对象的地址.

方式二:

String s = new String("abc");

这种方式的String类型变量s 指向的是一个存放在堆中的String对象的地址.

方式三:

String s= "abc";

这种方式的String类型变量s 指向的是一个存放在字符串常量池的地址.对应地址存放的数据是"abc". JDK1.8后,字符串常量池被存放在元空间内(实际的物理内存空间中).1.8以前存放在堆中永久代.

1.2 String类方法

1. charAt 查找特定位置字符

  • 语法格式;charAt(int index)
  • 查找特定位置(index)的字符.返回值类型 char
String s = "abcdef";
char c=s.charAt[3];//c的值为'd'.

2. concat 拼接字符串

  • 在字符串后拼接传入的字符串,并返回一个新的字符串,原字符串内容不变.返回值类型 String
  • 语法格式:concat(String string)
 String s ="abcdef";
 String s1= s.concat("ghijk");
 System.out.println(s1);//输出 abcdefghijk

3. endsWith & startsWith 判断是否以特定的字符串结尾或开始

  • 语法格式:
    startsWith(String string);//判断是否以传入字符串开始
    startsWith(String string, int offset);//判断是否以传入字符串偏移量在offset位置开始,
    startsWith(String string);//判断是否以传入字符串结束
  • 返回值类型 boolean
 String s = "abcdefg";
 System.out.println(s.startsWith("ab"));//true
 System.out.println(s.startsWith("ab", 2));//false
 System.out.println(s.startsWith("cd", 2));//true
 System.out.println(s.endsWith("fg"));//true

4. getBytes 将字符串转成字节数组

  • 语法格式
    getBytes()
  • 返回值类型 byte[]
String s = "abcdefg";
System.out.println(Arrays.toString(s.getBytes()));//输出[97, 98, 99, 100, 101, 102, 103]

5. indexOf 指定字符或字符串一次出现的位置

  • 语法格式:
    indexOf(String str )//指定字符串str第一次出现的位置
    indexOf(int ch)//指定字符ch第一次出现的位置
    indexOf(String str , int fromIndex)//在fromIndex后第一次出现字符串str的位置
    indexOf(int ch ,int fromIndex )//在fromIndex后第一次出现字符ch的位置
  • 返回值类型 int
  String s = "abcdefgabcdefg";
  System.out.println(s.indexOf("cd"));//输出 2
  System.out.println(s.indexOf(98));//输出 1
  System.out.println(s.indexOf("cd", 4));//输出 9
  System.out.println(s.indexOf('a', 3));//输出 7

6. lastIndexOf 指定字符或字符串最后一次出现的位置

  • 语法格式:
    lastindexOf(String str )//指定字符串str最后一次出现的位置
    lastindexOf(int ch)//指定字符ch最后一次出现的位置
    indexOf(String str , int fromIndex)//在fromIndex前最后一次出现字符串str的位置
    indexOf(int ch ,int fromIndex )//在fromIndex前最后一次出现字符ch的位置
  • 返回值类型 int
	String s = "abcdefgabcdefg";
	System.out.println(s.lastIndexOf("fg"));//输出 12
	System.out.println(s.lastIndexOf('f'));// 输出 12
	System.out.println(s.lastIndexOf("ab", 10));// 输出 7
	System.out.println(s.lastIndexOf('f', 10));// 输出 5

7. length 获取字符串长度

  • 语法格式:
    length()
  • 返回值类型 int
String s = "abcdefgabcdefg";
System.out.println(s.length());//输出 14

8. split 以指定字符串分隔字符串

  • 语法格式:
    split(String regex)//以指定字符串分隔字符串,支持正则表达式,分隔字符串被舍弃
    split(String regex,int limit)//分隔字符串后,限制字符串数组的长度,如超过limit则不再进行分隔
  • 返回值类型 String[]
String s = "a b c d e fgabcdefg";
System.out.println(Arrays.toString(s.split(" ")));//输出 [a, b, c, d, e, fgabcdefg]
System.out.println(Arrays.toString(s.split(" ", 3)));//输出[a, b, c d e fgabcdefg]

9. subString 截取字符串

  • 语法格式:
    substring(int beginIdex)//以beginIndex下标位置开始截取字符串
    substring(int beginIdex , int endIndex)//以beginIndex下标位置开始endIndex下标位置为结束截取字符串.[beginIndex,endIndex)结束位置字符不在截取范围内.
  • 返回值类型 String
String s = "abcdefgabcdefg";
System.out.println(s.substring(2, 4));//输出 cd
System.out.println(s.substring(2));//输出 cdefgabcdefg

10. 字符串转大小写

  • 语法格式:
    toUpperCase()//全部字符转成大写
    toLowerCase()//全部字符转成小写
  • 返回值类型 String
String s = "abcdefgabcdefg";
String s1= s.toUpperCase();
System.out.println(s1);//输出  ABCDEFGABCDEFG
System.out.println(s1.toLowerCase());//输出 abcdefgabcdefg

11. trim() 去除字符串收尾两端空格

  • 语法格式:
    trim()//去除字符串收尾两端空格,中间的保留
  • 返回值类型 String
String s = "   abcdefg  abcdefg  ";
System.out.println(s.trim());//输出:abcdefg  abcdefg

2 java.lang.StringBuffer 类&java.lang.StringBuilder 类

  • 默认的字符串拼接有与占用资源太大,当多次拼接时有可能造成系统执行缓慢.
  • StringBuffer & StringBuilder 称为可变长度字符串.在拼接时可大大提升效率,节省系统资源.

2.1练习: StringBuffer & StringBuilder效率与String效率对比

public class Test {

    public static void main(String[] args) {
        //输出普通字符串拼接执行时间与StringBuffer拼接时间差值
        System.out.println(strappend() - sbappeend());
    }

    private static long strappend() {
        //首先测试String类字符串拼接效率
        String s = "abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg";
        String s1 = "";
        long time =System.currentTimeMillis();
        for (int i = 0; i <10000 ; i++) {
            s1 +=s;
        }
        return (time = System.currentTimeMillis() - time);//返回字符串拼接10000次的时间表
    }

    private static long sbappeend() {
        String s = "abcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefg";
        StringBuffer sb =new StringBuffer("");
        long time =System.currentTimeMillis();
        for (int i = 0; i <10000 ; i++) {
            sb.append(s);
        }
        return (time = System.currentTimeMillis() - time);//返回字符串拼接10000次的时间表
    }
}

运行结果:

6058

版权声明:本文为weixin_48214440原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。