String类型是我们都比较熟悉的类型,可以说是最常用的一种。故而,对于了解它很有必要。在Java中,String类型是不可变序列,用双引号标记。
视频中列举了两个实例:区分大小写和 查找字符串中是否包含某个字符串。
区分大小写
区分大小写的方法基础的有三种:ASCII方法、包含法和判断法。这三种方法都是比较的方法,来确定内容是否是大写、小写或其它。
ASCII法
String s = "AaaaABBBBcc&^%adfsfdCCOOkk99876 _haHA";
int lCount = 0,uCount = 0,oCount = 0;
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);//取字符
if (c >= 'a' && c <= 'z') {//判断字符的ASCII是否属于小写字母内
lCount ++;//小写个数
}else if (c >= 'A' && c <= 'Z') {//判断字符的ASCII是否属于大写字母内
uCount ++;//大写个数
}else{
oCount ++;//其它字符
}
这种方法会将输入的内容默认为字符数组,并且通过循环判断每一个字符的大小写来记录全部内容的大小写个数。这里,会自动获取字符的ASCII码,然后分别与大小写字母的ASCII码比较,从而得到相应的个数。
包含法
String sL = "abcdefghijklmnopqrstuvwxyz";//所有小写字母集合
String sU = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//所有大写字母集合
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);//取字符
if (sL.indexOf(c) != -1) {//查找字符是否在sL中
lCount ++;//小写个数
}else if (sU.indexOf(c) != -1) {//查找字符是否在sU中
uCount ++;//大写个数
}else{//其他情况
oCount ++;//其它字符
}
}
这种方法是将所有的小写字母当作一个String类型对象,大写字母作一个String类型对象。同样需要将所有输入内容当作一个String对象,并看成字符数组,分别判断字符是被否包含在大小写字母对象中,从而得到相应的个数。
判断法
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);//取字符
if (Character.isLowerCase(c)) {//Character为字符操作集,isLowerCase判断字符是否是小写字母
lCount ++;//小写个数
}else if (Character.isUpperCase(c)) {//isUpperCase判断字符是否是大写字母
uCount ++;//大写个数
}else{//其他情况
oCount ++;//其它字符
}
}
和上一种方法相似,都是通过字符集进行判断。有所区别的都是,Character是系统封装的对象,是字符操作集,通过isLowerCase判断字符是否是小写字母,isUpperCase判断字符是否是大写字母。只不过上一种方法,是我们自己创建的字符集,而这里是java已经封装好了的,我们可以直接用的,更方便、快捷。
是否包含某字符串
与前面判断某个字符是什么状态类似,这里是将多个字符组成的字符串当作比较的对象,判断某个字符串中是否包含这个字符串。通过indexOf方法可以找到这个字符串在所查找的字符串内容匹配到的第一个符合要求的首字符位置索引。然后通过将匹配成功之前的都剪切掉,继续向后面匹配,再找到下一个的第一个,一次类推,直至查找完毕为止:
int index = s.indexOf(sToFind);//找到第一次出现java的首字符位置索引
if(index != -1){
count ++;//只要index不等于-1,证明有一个java,count加1
}
s = s.substring(index + sToFind.length());//截取字符串,从index+sToFind开始,即java及jiava之前的字符去掉,换句话说就是从java的末尾+1开始截取字符,一直到末尾。如果是有限个截取,需要后面跟上截取位数
while(s.indexOf(sToFind) != -1){//同上面单步相同,循环操作
index = s.indexOf(sToFind);
s = s.substring(index + sToFind.length());
count ++;
}
substring方法是用来截取字符串的,参数(int类型)为一个时,则是从参数索引起开始截取,到内容结尾。如如果是两个参数,则是从第一个参数索引起开始截取,截取到第二个参数索引位置的内容。上面的代码可以简化为:
int index = -1;
while ((index = s.indexOf(sToFind)) != -1) {
s = s.substring(index + sToFind.length());
count ++;
}
String类型方法
- charAt(int dex):返回字符串第index字符
- length():字符串长度
- indexOf(String str):str的第一个位置
- indexOf(String str,int fromIndex):从fromIndex位置开始,str的第一个位置
- equalsIgnoreCase(String str):比较字符串与str是否一样(忽略大小写)
- replase(char oldChar,char newChar):字符替换,newChar替换oldChar
- startsWith(String prefix):判断字符串是否是以prefix开头
- endsWith(String suffix):判断字符串是否是以suffix结尾
- toUpperCase():转换字符为大写形式
- toLowerCase():转换字符为小写形式
- substring(int beginIndex):截取从beginIndex开始到结尾的子字符串
- substring(inde beginIndex,int endIndex):截取从beginIndex开始到endIndex结尾的子字符串
- trim():去掉开头与结尾的空格