String概述
包:java.lang 不需要导包
继承结构:继承了Object父类
类定义: public final class String extends Object String是final修饰 不能被继承
概述: String 类代表字符串 Java 程序中的所有字符串字面值(如 “abc” )都作为String类的对象 字符串是常量;它们的值在创建之后不能更改; 理解:字符串转为字符数组进行存储
源码定义
public final class String{
private final char[] value;
}
String的构造方法
String() ----创建空字符串对象 String(String original) - 根据参数创建String对象 String(char[] value) ----分配一个新的 String,使其表示字符数组参数中当前包含的字符序列 String(char[] value, int offset, int count) - —将字符数组部分内容转为字符串
String的方法
- char charAt(int index)—返回指定索引处的 char 值如果超出范围,运行抛出StringIndexOutOfBoundsException
- int length()—返回此字符串的长度
- public String concat(String str)—将当前字符串的内容和参数字符串的内容拼接
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
- boolean contains(CharSequence s)—判断当前字符串是否包含参数的内容
- boolean endsWith(String suffix)—判断当前字符串是否是以参数字符串结尾
- boolean startsWith(String prefix)— 判断当前字符串是否是以参数字符串开始
- boolean startsWith(String prefix, int toffset)—从指定的位置开始判断当前字符串是否是以参数字符串开始
- static String copyValueOf(char[] data)—将参数字符数组包装为String对象返回
- boolean equals(Object anObject)—将此字符串与指定的对象比较
String重写了equals方法 比较字符串内容是否相等
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
- boolean equalsIgnoreCase(String anotherString) — 忽略大小写的比较内容相等
- byte[] getBytes()—将字符串转为字节数组—默认码表—idea–UTF-8 eclipse—GBK
- void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) —将字符串中的部分字符复制到字符数组中–注意:左闭右开
- int hashCode()—重写了该方法—返回此字符串的哈希码值
- int indexOf(int ch) —查找字符在字符串中第一次出现的下标
- int indexOf(int ch, int fromIndex) —从fromIndex下标处开始查找字符第一次出现的下标
- int indexOf(String str) —查找字符串在字符串中第一次出现的下标
- int indexOf(String str, int fromIndex)— 从fromIndex下标处开始查找字符串第一次出现的下标
- int lastindexOf(int ch)—返回指定字符在此字符串中最后一次出现处的索引。
- int lastIndexOf(int ch, int fromIndex)— 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
- int lastIndexOf(String str)—返回指定子字符串在此字符串中最右边出现处的索引。
- int lastIndexOf(String str, int fromIndex)—返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
- String intern() — 获取String对象的字符串在常量池中的地址
- boolean isEmpty()—判断字符串是否为空串 “” null
替换:不会改变原字符串,会将替换之后的结果以新的字符串返回—将旧字符替换为新字符
- String replace(char oldChar, char newChar)
- String replace(CharSequence target, CharSequence replacement)
截取:返回一个新的字符串,它是此字符串的一个子字符串。
-
String substring(int beginIndex) -
String substring(int beginIndex, int endIndex) -
char[] tocharArray()—将此字符串转换为一个新的字符数组 -
String toLowerCase()—使用默认语言环境的规则将此 String 中的所有字符都转换为小写 -
String toUpperCase()—使用默认语言环境的规则将此 String 中的所有字符都转换为大写 -
String toString() 重写了Object的toString -
String trim()—返回字符串的副本,忽略前导空白和尾部空白
其他类型转String
- static String valueOf(int i)
- static String valueOf(char c)
- static String valueOf(char[] data)
- static String valueOf(Object obj)
比较当前字符串和参数字符串的大小(字典顺序)
- int compareTo(String anotherString)
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
- int compareToIgnoreCase(String str)—不考虑大小写
正则相关
- boolean matches(String regex)— 告知此字符串是否匹配给定的正则表达式。
- String replaceAll(String regex,String replacement)—替换此字符串所有匹配给定的正则表达式的子字符串
- String[] split(String regex)— 根据给定正则表达式的匹配拆分此字符串、
重点
字节数组<->字符串 String->byte[]: 44. getBytes()—使用码表 45. byte[] getBytes(String charsetName) -使用指定码表
byre[] ->String: 46. String(byte[] bytes)—使用默认码表 47. String(byte[] bytes,String charsetName)—使用指定码表
字符数组<->字符串 String->char 48. toCharArray() 49. char[] ->String 50. new String(char[] ) 51. copyValueOf(char[] cs)
字符串拼接
-
concat 因为String不可变,所以每次拼接都返回一个新的字符串对象,不建议concat拼接 -
“+” String str = “a”+“b”; -
StringBuilder、StringBuffer
String的内存
字符串常量池:private final char[] value JDK 1.8之前,字符串常量池在方法区;
String str = “abc”;—将"abc"字符数组在常量池中的地址赋值给str String str1 = new String(“abc”);—将new出来的堆的地址值赋值给str1 堆中对象的value属性存储字符串在常量池中的地址值
|