1. String 是什么
Java 中字符串是一个比较特殊的对象,可以使用 new,也可以不通过 new 来创建字符串对象。
String s1 = new String("abc"); //在堆中
String str = "abc"; //在常量池中(ps: 常量池为方法区的一部分,字符串在常量池中保存一份,若没有则创建)
字符串是不可变量,一旦初始化就不可以被改变
String s1 = "abc";
s1 = s1 + "123"; //s1变量变了,并不是字符串变了
使用构造方法创建的对象都是在堆中
如果直接使用字符串常量创建对象:new String(String original),先在常量池中创建对象,然后在堆中创建对象;
如果是其它构造方法创建的字符串,先在堆中创建出来,并在常量池保存一个副本(如果常量池中没有的话)
2. String 常用的构造方法
构造方法 | 说明 |
String(char[] ch) | 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。 |
String(char[] ch,int offset,int count) | 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。 |
String(byte[] bys,int off,int len) | 使用默认的解码,将字节数组解码成String。 |
String(String original) | 用一个原始字符串构建一个新字符串,相当于为字符串创建副本。 |
3. String 类常见方法
方法 | 说明 |
length() | 返回此字符串的长度。 |
charAt(int index) | 返回指定索引处的 char 值。 |
toCharArray() | 将此字符串转换为一个新的字符数组。 |
indexOf(String str) |
返回指定子字符串在此字符串中第一次出现处的索引。 |
startsWith(String prefix) | 测试此字符串是否以指定的前缀开始。 |
endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 |
isEmpty() |
判断是否为空,当且仅当 length() 为 0 时返回 true。 |
substring(int beginIndex) | 返回一个新的字符串,它是此字符串的一个子字符串。 |
trim() | 返回字符串的副本,忽略前导空白和尾部空白。 |
matches(String regex) | 告知此字符串是否匹配给定的正则表达式。 |
split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
replaceAll(String regex, String replacement) | 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
toLowerCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
toUpperCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
contains(CharSequence s) | 当且仅当此字符串包含指定的 char 值序列时,返回 true。 |
equals(Object anObject) | 将此字符串与指定的对象比较。 |
4. == 和 equals()方法 的区别
==: 对于引用数据类型,比较的是地址值
equals()方法: 先比较地址值,若地址值不同,再比较字符序列
5. 统计大小写字符个数
【思路】
通过 length()方法 获得字符串长度,循环,通过 charAt()方法 得到索引处的 char值,通过其与 ASCLL值 对比,通过计数进行统计。
6. 短串在长串中出现的次数
例:
String src = "10abc111ababb";
求"ab"出现的次数
思路:使用 while 循环结合 indexOf(String str) 方法