String–字符串
类 String
public final class String
final修饰 不可继承的类
字符串底层是通过一个字符数组来存储的
private final char value[];
字符数组被final修饰,所以value不可变
字符串是常量;
String默认重写了Object继承过来的toString equals
String构造方法:
String()
初始化一个新创建的 String 对象,使其表示一个空字符序列。
String(char[] value)
分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;
换句话说,新创建的字符串是该参数字符串的副本
简化创建String对象:
String str = “abc”;
String方法:
char charAt(int index) --根据下标获取字符串中的字符(index:0—长度-1)
String concat(String str) — 将指定字符串连接到此字符串的结尾
该方法不会对调用方法的字符串对象造成影响 拼接之后产生一个新的字符串返回
//concat
String str = “hi”;
String res = str.concat(" haoxia");//“hi haoxia”
System.out.println(res);
以上代码为例,在字符串常量池中有三个对象,分别为:“hi” " haoxia" “hi haoxia”
boolean contains(CharSequence s) --当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean contains(String str)–判断在当前字符串中是否包含参数字符串
boolean endsWith(String suffix) —测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix) — 测试此字符串是否以指定的前缀开始
boolean equals(Object anObject) —将此字符串与指定的对象比较
重写了Object中的equals方法
1、比较地址值是否一致
2、判断参数是否为字符串类
3、将参数从Object类型强转为String
4、判断当前字符串和参数字符串长度是否一致
5、用当前字符串的字符串的每一个元素和参数字符串的字符数组进行一一比较
如果哪个不相同 则直接返回false 如果比完了 都一样则返回true
boolean equalsIgnoreCase(String anotherString) — 将此 String 与另一个 String 比较,不考虑大小写
byte[] getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,
并将结果存储到一个新的 byte 数组中
eclipse:GBK 一个中文汉字占用两个字节
idea:UTF-8 一个中文汉字占用三个字节
String str = "a";
byte[] bs=str.getBytes();//idea默认utf-8
System.out.println(Arrays.toString(bs));//[97]
String str = "中";
byte[] bs=str.getBytes();//idea默认utf-8
System.out.println(Arrays.toString(bs));//[-28, -72, -83]
byte[] getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,
并将结果存储到一个新的 byte 数组中
String str = "中";
byte[] bs = str.getBytes("GBK");//指定使用GBK编码
System.out.println(Arrays.toString(bs));//[-42, -48]
String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,
构造一个新的 String
byte[] bs = {-28, -72, -83};
String str = new String(bs);
System.out.println(str);
String(byte[] bytes, String charsetName)
通过使用指定的 charset 解码指定的 byte 数组
构造一个新的 String
byte[] bs = {-42, -48};
String str = new String(bs,"GBK");
System.out.println(str);
int hashCode() – 返回此字符串的哈希码 String重写了
hashcode方法—只要字符串内容一致得到的hash码值也是一致的
public int indexOf(int ch)—返回指定字符在此字符串中第一次出现处的索引
int indexOf(int ch, int fromIndex) --返回在此字符串中第一次出现指定字符处的索引,, 从指定的索引开始搜索。
int indexOf(String str) --返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex) – 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
注意:
所有的indexOf方法如果查找不到都是返回-1
int lastIndexOf(int ch) --返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex) --返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str) --返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex) --返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
注意:
lastIndexOf方法中如果指定了fromIndex参数,
则是从这个参数索引的位置向左去查找第一次出现的下标
String intern() --返回字符串对象的规范化表示形式
可以获取当前字符串常量池中的字符串常量
String str = "hello";
String str1 = new String("hello");
System.out.println(str==str1);//false
System.out.println(str == str1.intern());//true
boolean isEmpty()
当且仅当 length() 为 0 时返回 true
int length()
返回此字符串的长度
底层实现:
public int length() {
return value.length;
}
String replace(char oldChar, char newChar) --返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
String replace(String target, String replacement) --使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串
//统计字符串中a出现的次数
String str = "abcaa";
String str1 = str.replace("a","");
System.out.println(str.length()-str1.length());
String substring(int beginIndex) – 返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex)– 从指定索引开始到结尾的所有字符返回一个新字符串,它是此字符串的一个子字符串
[beginIndex,endIndex) 不包含endIndex处的字符
char[] toCharArray() – 将此字符串转换为一个新的字符数组
String toLowerCase() – 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toUpperCase() --使用默认语言环境的规则将此 String 中的所有字符都转换为大写
String trim() --返回字符串的副本,忽略前导空白和尾部空白
注意:不能去掉中间的空格
int compareTo(String anotherString) – 按字典顺序比较两个字符串
返回值为int:
0:则当前字符串等于参数字符串
负数:则当前字符串小于参数字符串
正数:则当前字符串大于参数字符串
static String valueOf(int i) --返回 int 参数的字符串表示形式
static String valueOf(Object obj)–返回 Object 参数的字符串表示形式
static String valueOf(char[] data) --返回 char 数组参数的字符串表示形式
注意:
1、static修饰 可以通过String类直接调用
2、对于除字符数组之外的其他数组,通过输出语句输出时,底层默认调用String.valueOf(Object obj)
底层实现是调用obj.toString(); 数组对象调用toString获取到的地址值;
3、字符数组非常特殊,输出字符数组时,直接将字符数组进行输出
valueOf(char[] data)–直接返回一个字符串对象
正则表达式相关的方法:
boolean matches(String regex) – 告知此字符串是否匹配给定的正则表达式。
String replaceAll(String regex, String replacement) – 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
String[] split(String regex) – 根据给定正则表达式的匹配拆分此字符串。
正则表达式
在java中正则表达式相关的类:
类 Pattern
类 Matcher
基本正则语法:
字符
x 字符 x --精准匹配
字符类:
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
. 任何一个字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有 至多一次
X* X,零次或多次 可有可没有
X+ X,一次或多次 至少一次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
边界匹配器
^ 行的开头
$ 行的结尾