字符串概述:
字符串是一个特殊的对象,一旦被初始化就不可以被改变。
String类中提供了对字符串操作的方法:
1 获取
1.1 获取字符串中包含的字符数,也就是字符串的长度
int length() : 获取长度
1.2 根据位置获取某个位置上的字符
char charAt(int index):
1.3 根据字符获取该字符在字符串中的位置
int indexOf(int ch) : 返回ch在字符串中第一次出现的位置
int indexOf(int ch,int fromIndex) : 从fromIndex指定的位置开始,获取ch在字符串中第一次出现的位置
int lastIndexOf(int ch) : 返回ch在字符串中最后一次出现的位置
public static void get(){
String str = "abcdefghcdecfh";
//获取长度
int len = str.length();
sop(len);
//获取角标为3的字符,字符串角标从0开始
//当访问到不存在的角标时出现IndexOutOfBoundsException异常
char ch = str.charAt(3);
sop(ch);
//获取字符c在字符串中第一次出现的位置
//没有找到返回-1
int index = str.indexOf('c');
sop(index);
//从5开始,获取c第一次出现的位置
index = str.indexOf('c',5);
sop(index);
//c最后一次出现的位置
index = str.lastIndexOf('c');
sop(index);
}
2 判断
2.1 字符串中是否包含某一个子串
boolean contains(str) :
特殊之处:
indexOf(str) :可以索引str第一次出现的位置,如果返回-1,表示str不在字符串中存在。
所以,也可以用于对指定字符判断是否包含
2.2 字符串中对否有内容
boolean isEmpty(): 原理就是判断长度是否为0
2.3 字符串对否是以指定内容开头
boolean startsWith(str)
2.4 字符串是否是以指定的内容结尾
boolean endsWith(str)
2.5 判断字符串内容是否相同,复写了Object类中的equals方法。
boolean equals(str);
2.6 判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase()
public static void is(){
String str = "StringDemo.java";
String str1 = "StringDemo.java";
String str2 = "stringdemo.java";
//str中是否包含“Demo”子串
boolean b = str.contains("Demo");
//判断字符串是否为空
b = str.isEmpty();
//是否是以“String”开头的
b = str.startsWith("String");
//是否是以“.java”结尾的 用于判断文件类型
b = str.endsWith(".java");
//判断str跟str1的内容是否相同,复写Object的equals方法
b = str.equals(str1);
//判断str跟str2的内容是否相同,忽略大小写。 邮箱登陆是忽略大小写
b = str.equalsIgnoreCase(str2);
}
3 转换
3.1 将字符数组转换成字符串
构造函数: String(char[] c)
String(char[] c,offset,count): 将数组中的一部分转换成字符串
静态方法: static String copyValueOf(char[] c)
static String copyValueOf(char[] c,int offset,int count)
static String valueOf(char[] c):
3.2 将字符串转换成字符数组
char[] toCharArray()
3.3 将字节数组转换成字符串
构造函数:String(byte[] b)
String(byte[] b,int offset,int count):将字节数组的一部分转换成字符串
3.4 将字符串转换成字节数组
byte[] getBytes() : 在IO流操作中比较常用
3.5 将基本数据类型转换成字符串
static String valueOf(int i)
static String valueOf(double
i)
...
简单的转换就是 3+“”结果就是一个字符串
特殊: 字符串和字节数组在转换的过程中,可以指定编码表。
public static void trans(){
char[] c = {'a','b','c','d','e','f'};
//字符数组变成字符串
String s = new String(c);
sop(s);
String s1 = new String(c,2,4);
sop(s1);
String s2 = String.copyValueOf(c);
sop(s2);
//字符串变成字符数组
char[] c1 = s1.toCharArray();
byte[] b = {'a','b','c','d','e'};
//字节数组变成字符串
String bs = new String(b);
String bs1 = new String(b,2,2);
//字符串变成字节数组
byte[] b1 = bs.getBytes();
}
4 替换
String replace(oldchar,newchar)
5 切割
String[] spilt(String regex)
6 子串,获取字符串中的一部分
String subString(int begin)
String subString(int begin,int end)
public static void method(){
String str = "hello java";
//将str中的a替换成c
String s1 = str.replace('a', 'c');
sop(s1);
String name = "zhangsan,lisi,wangwu";
//将name字符串,以逗号切割成长度为3的字符串数组
String[] s2 = name.split(",");
for(int i=0;i<s2.length;i++){
sop(s2[i]);
}
//获取str的子字符串,从第2个开始,到第四个,包含头不包含尾,不含第五个。
String sub = str.substring(2,5);
sop(sub);
}
7 转换,去除空格,比较
7.1 将字符串转换成大写或者小写
String toUpperCase():转换成大写
String toLowerCase():转换成小写
7.2 将字符串两端的多个空格去掉
String trim();
7.3 对两个字符串进行自然顺序的比较
int compareTo(String str)
public static void method_7(){
String str = " Hello Java ";
String str1 = "aaa";
String str2 = "abc";
//转换成小写
sop(str.toLowerCase());
//转换成大写
sop(str.toUpperCase());
//去掉两端的空格
sop(str.trim());
//比较两个字符串的自认顺序,返回的值是两个不相同字符的在ASCII中的差值
int i = str1.compareTo(str2);
sop(i);
}
常用于操作字符串的容器:
StringBuffer ,StringBuilder
特点:是一个容器,也就是String的缓冲器,
可以对字符串的内容进行增删,
长度是可以变化的
可以操作多种数据类型
StringBuffer是线程同步的,可以应用在多线程中。
StringBuilder是线程不同步的,建议在单线程中使用,比StringBuffer高效
主要的方法:
1 存储
StringBuffer append():将指定数据作为参数添加到已有的数据结尾处
StringBuffer insert(int index, 数据):将数据插入到指定的index位置
2 删除
StringBuffer delete(int start,int end):删除缓冲区中的数据,包含start,不包含end
StrinfBuffer deleteCharAt(int index):删除指定位置的字符
3 获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end)
这个跟String类中的方法基本一样
4 修改
StringBuffer replace(int start,int end,String str)
void setCharAt(int index,char ch)
修改指定位置字符,没有返回值
5 反转
StringBuffer reverse()
public static void StringBufferDemo(){
StringBuilder sb = new StringBuilder();
//添加
sb.append("adsabc");
sop(sb.toString());
sb.insert(2, "java");
sop(sb.toString());
//删除
sb.delete(1,3);
sop(sb.toString());
//修改
sb.setCharAt(1, 'x');
sop(sb.toString());
//反转
sb.reverse();
sop(sb.toString());
}