字符串-创建、常用API
什么是字符串
多个字符连接起来组成的字符序列
举例:“中国”
注意:字符串是用双引号括起来的,字符是用单引号括起来的
字符串的创建
1、String s=new String(“hello”);
2、char[] b={‘h’,‘e’,‘l’,‘l’,‘o’};
String s=new String(b);
3、byte[] b={‘h’,‘e’,‘l’,‘l’,‘o’};
String s=new String(b);
4、String s=“hello”;
区别:使用new关键字创建字符串对象,一定会在堆里开辟空间,第四种的话如果字符串常量池中没有这个字符串那么它会在堆里开辟空间,有的话就不在堆里开辟空间。
验证:
String s1="abc";
String s2="abc";
String s3=new String("abc");
System.out.printlb(s1==s2);
System.out.printlb(s3==s1);
结果:
true
false
注意:代码中的比较运算符“==”比较的是两个字符串的地址是否相同
常用API
length()
求字符串长度
String s1="";
String s2=" ";
String s3="Hello World";
System.out.println(s1.length());
System.out.println(s2.length());
System.out.println(s3.length());
结果:
0
1
11
注意:在字符串中length()是方法,后面要加上(),而在数组中length是属性,后面不用加(),如:a.length;
charAt()
将制定索引处的字符返回
String s="china";
char a=s.charAt(3);
System.out.println(a);
结果:
n
toCharArray()
将字符串转变为字符数组
String s="hello";
char[] c=s.toCharArray();
System.out.println(Arrays.toString(c));
结果:
[h, e, l, l, o]
getBytes()
将字符串转换成byte类型的数组
String s="hello";
byte[] b=s.getBytes();
System.out.println(Arrays.toString(b));
结果:
[104, 101, 108, 108, 111]
isEmpty()
判断字符串是否为空,返回boolean类型
String s1="hello";
String s2=" ";
String s3="";
System.out.println(s1.isEmpty());
System.out.println(s2.isEmpty());
System.out.println(s3.isEmpty());
结果:
false
false
true
注意:字符串为空返回true,不为空返回false
indexOf() lastIndexOf()
- indexOf(String s):查找字符串s在所查找字符串中第一次出现的位置,如果有,返回子串第一次出现的位置,没有查找到,返回-1
String s="Helohlo World";
System.out.println(s.indexOf("lo"));
System.out.println(s.indexOf("p"));
结果:
2
-1
- indexOf(String s,int i):从要查找的字符串的第i个位置开始查找,返回和上面一样
String s="Hellollopotu";
System.out.println(s.indexOf("lo",5));
System.out.println(s.indexOf("ll",8));
结果:
6
-1
- lastIndexOf(String s):类比indexOf(String s),只是查找最后出现的位置
String s="heloolopolo";
System.out.println(s.lastIndexOf("lo"));
System.out.println(s.lastIndexOf("a"));
结果:
9
-1
- lastIndexOf(String s,int i):类比indexOf(String s,int i):只是查找子串最后出现的位置
String s="pdhipdubpdfg";
System.out.println(s.lastIndexOf("pd",3));
System.out.println(s.lastIndexOf("hi",5));
结果:
0
2
注意:lastIndexOf(String s,int i)是查找字符串在位置i之前的子串
toUpperCase() toLowerCase()
- toUpperCase():转成大写
String s="khihi";
System.out.println(s.toUpperCase());
结果:
KHIHI
- toLowerCase():转成小写
String s="GYFSWhgY";
System.out.println(s.toLowerCase());
结果:
gyfswhgy
substring()
- substring(int i):从字符串的i位置截取到最后,返回一个新的字符串
String s1="hsfuwdwv";
String s2=s1.substring(2);
System.out.println(s2);
结果:
fuwdwv
- substring(int i,int j):从i位置截取到j-1位置
String s1="sfrethtrhr";
String s2=s1.substring(2,5);
System.out.println(s2);
结果:
ret
trim()
去掉字符串的空格,但是只能去掉开始和结束的空格,中间的空格不能去掉
String s=" dhu d b ";
String s2=s.trim();
System.out.println(s2);
结果:
dhu d b
replace()
replace(String s1,String s2):用s2替换掉字符串中的s1
String s="jhkjhuy";
String s2=s.replace("j","hello");
String s3=s.replace("h","");
System.out.println(s2);
System.out.println(s3);
结果:
hellohkhellohuy
jkjuy
startsWith() endsWith()
- startsWith(String s):判断这个字符串是否是s开头的,返回一个boolean类型的值
String s="shgd";
System.out.println(s.startsWith("s"));
System.out.println(s.startsWith("b"));
结果:
true
false
- startsWith(String s,int i):判断字符串从i位置开始起是不是以s开头
String s="dsfwg";
System.out.println(s.startsWith("f",2));
结果:
true
- endsWith(String s):判断字符串是不是以s结尾
String s="bhbmj";
System.out.println(s.endsWith("mj"));
结果:
true
equals() equalsIgnoreCase()
- equals(String s):比较两个字符串是否相等,比较区分大小写,如果用“==”比较的是地址
String s1="hello";
String s2="hello";
String s3="Hello";
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
结果:
true
false
- equalsIgnoreCase(String s):比较时不区分大小写
String s1="hello";
String s2="Hello";
String s3="HELLO";
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
结果:
true
true
compareTo()
compareTo(String s):比较各个字符的Unicode值,注意是一个字符一个字符的进行比较
String s1="ac";
String s2="ab";
String s3="c";
String s4="ac";
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s1.compareTo(s4));
结果:
1
-2
0
如果前者大返回一个正整数,反之返回一个负整数,如果相等返回0
练习
将一个字符串进行反转
String s="abcde";
char[] c=s.toCharArray(); //转化为数组
for(int i=0;i<c.length/2;i++) //将数组进行反转
{
char temp=c[i];
c[i]=c[c.length-1-i];
c[c.length-1-i]=temp;
}
String s2=new String(c); //重新转化为字符串
System.out.println(s2);
结果:
edcba
找出字符串中所有的大写字母并输出数量
String s="jbxjisVHfVBHJScbhjBHSJ";
int count=0;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)>='A'&&s.charAt(i)<='Z') //判断是否为大写字母
{
System.out.print(s.charAt(i)+" ");
count++; //计数器加一
}
}
System.out.println(); //换行
System.out.println(count);
结果:
V H V B H J S B H S J
11