文章目录
String类
char类型只能表示单个字符,不能表示由多个字符连接而成的字符串。在定义字符型变量时,要以单引号表示,如’s’表示一个字符,而"s"则表示一个字符串,虽然只有一个字符,但由于使用双引号,它仍然表示字符串,而不是字符。
声明字符串
在Java中字符串必须包含在一对双引号("")之内。用双引号包围的字符串不能作为其他数据类型来使用。
声明字符串变量语法格式:
String str = "cehncehn";
创建字符串
在Java中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象。String类的常用构造方法如下:
- String(char a[])
用一个字符数组a创建String对象。
char[] a = {'g','o','o','d'};
String s = new String(a);
//等价于
String s = new String("good");
- String(char a[],int offset,int length)
除通过String类的构造方法来创建字符串变量外,还可以通过字符串常量的引用赋值给一个字符串变量。
String str1;
String str2;
str1 = "cehncehn"
str2 = "cehncehn"
//str1与str2具有相同的实体。
连接多个字符串、连接其他数据类型
"+"运算符可以实现连接多个字符串的功能。
Java中一句相连的字符串不能分开在两行中写。例如下列语句的写法就是错误的。
System.out.println("I like
java");
如果一个字符串太长,需要写在两行上,可以修改为如下:
System.out.println("I like"+
"Java");
字符串也可同其他基本数据类型进行连接,此时会自动调用toString()方法将这些数据直接转换成字符串。
public static void main(String[] args) {
int booktime = 4;
System.out.println("我每天花"+booktime+"小时看书");//我每天花4小时看书
}
注意:
public static void main(String[] args) {
int a = 4;
int b = 4;
System.out.println("a+b=" + a + b);//a+b=44
System.out.println(a + b + "a+b=");//8a+b=
}
获取字符串信息
获取字符串长度
str.length();//返回的长度包括字符串中的空格
字符串查找
public static void main(String[] args) {
String name = "cehncehn";
System.out.println(name.indexOf("a")); //-1
System.out.println(name.indexOf("e")); //1
System.out.println(name.lastIndexOf("h")); //6
System.out.println(name.lastIndexOf("")); // 8
/*
1.indexOf(String s)返回参数字符串s在指定字符串中首次出现的索引位置,如果没有检测到s,该方法返回-1
2.lastIndexOf(String s)返回指定字符串最后一次出现的索引位置,如果没有检测到s,返回-1
3.lastIndexOf(String s)参数是空字符串时,返回结果与length()方法结果相同
*/
}
获取指定索引位置的字符
public static void main(String[] args) {
String name = "cehncehn";
System.out.println(name.charAt(3)); //n
}
字符串操作
获取子字符串
- substring(int beginIndex)
public static void main(String[] args) {
String name = "cehncehn";
System.out.println(name.substring(3)); //ncehn
}
//在字符串中,空格占用一个索引位置
- substring(int beginIndex , int endIndex)
public static void main(String[] args) {
String name = "cehncehn";
System.out.println(name.substring(2,5)); //hnc
}
去除空格
- str.trim() 忽略前导空格和尾部空格
public static void main(String[] args) {
String name = " cehn cehn ";
System.out.println(name.trim()); //cehn cehn
}
字符串替换
- str.replace(char oldChar,char newChar)
- replace()方法会将所有oldChar全部替换为newChar
- 要替换的字符oldChar的大小写要与原字符串中字符的大小写保持一致,否则不能成功的替换。
判断字符串的开始与结尾
- startsWith(String prefix)
- endsWith(String suffix)
- 返回值为Boolean类型
判断字符串是否相等
对字符串对象进行比较不能简单地使用比较运算符"==",因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。
public static void main(String[] args) {
String s1 = new String("cehn");
String s2 = new String("cehncehn");
System.out.println(s1==s2);//false
}
因此比较两个字符串是否相等使用equals()和equalsIgnoreCase()方法。
equals()区分大小写,equalsIgnoreCase()忽略大小写。
按字典顺序比较两个字符串
compareTo(),基于各个字符的Unicode值。位于参数字符串之前,则比较结果为一个负整数;位于参数字符串之后,则比较结果为一个正整数;相等返回0。
字母大小写转换
- toLowerCase()
- toUpperCase()
- 数字或非字符不受影响
字符转分割
- spilt()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中。
str.spilt(String sign); //sign为分割字符串的分隔符,也可以使用正则表达式
//如果想定义多个分割符,可以使用符号“|”。例如“,|=”表示分割符分别为“,”和“=”
格式化字符串
str.format(String formate,Object…args)
- 日期格式化
- 时间格式化
- 日期时间组合格式化
- 常规类型格式化
正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
字符串生成器
创建成功的x字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用"+“可以达到符加新字符或字符串的目的,但”+"会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复对字符串进行修改,将极大增加系统开销。JDK1.5新增了可变的字符序列StringBuilder类,大大的提高了频繁增加字符串的效率
public static void main(String[] args) {
String str = "";
long startTime = System.currentTimeMillis();
for(int i=0;i<10000;i++){
str = str + i;
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);//280
StringBuilder builder = new StringBuilder("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
builder.append(i);
}
endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);//1
}
如果在程序中频繁的符加字符串,建议使用StringBuilder。