(一)基础知识
1.String类的常用方法:
(1)Split:分割字符串
(2)equals:判断两个字符串是否相同
(3)substring:截取字符串
(4)startsWith:判断字符串是否以参数字符串开始
(5)endsWith:判断字符串是否以参数字符串结尾
(6)toUpperCase:把字符串中的英文字母转换成大写字母
(7)toLowerCase:把字符串中的英文字母转换为小写字母
(8)indexOf:返回参数字符串在另一个字符串第一次出现的位置
(9)charAt:返回一个字符串指定位置的字符
(10)replace:替换字符串
(11)trim:去掉字符串前后的空格
2.String,StringBuffer,StringBuilder区别:
StringBuffer线程安全但效率低,StringBuilder线程不安全但效率高。
String拼接字符串的方法是+较为占用内存,StringBuffer用append()方法拼接。
3.类型之间的转换:
(1)String对象转换成StringBuffer对象:利用StringBuffer的构造方法
String s=“hello”;//String s=new String(“hello”);
StringBuffer sb=new Stringbuffer(s);
(2)StringBuffer对象转换为String对象:利用StringBuffer的toString()方法
StringBuffer sb=new StringBuffer(“hello”);
String s=sb.toString();
(3)字符数组转化为String类:利用String的valueOf()方法或者Arrays类的toString()方法或者For循环一一赋值
char[] ch={'a','b'};
//char[] ch=new char[2];ch[0]='a';ch[1]='b';
String s=String.valueOf(ch);
或者:
char[] ch={'a','b'};
String s=Arrays.toString(ch);
或者:
char[] ch={'a','b'};
String s="";
for(int i=0;i<ch.length;i++){
s=s+ch[i];
}
(4)String类转换为字符数组:转换为StringBuffer对象用其toCharArray()方法
String s=”hello”;
StringBuffer sb=new StringBuffer(s);
char[] ch=strb.toCharArray();
(二)练习
1.获取指定字符串出现在字符串中出现的次数:
//法一:去掉不同于该指定字符串的其他字符串(将他们用空字符替换掉)后,得到所有该字符串的总长度除以该指定字符串的长度
static int getDisplayTimes(String str,String s){
int count = (str.length()-str.replaceAll(s, "").length())/s.length();
return count;
}
//法二:
static int getDisplayTimes(String s,String s1){
int count=0;
int index=0;
for(int i=0;i<s.length();i=index+s1.length()){
index=s.indexOf(s1,i);//从下标为i开始检索第一个出现的s1
if(index!=-1){
count++;
}else{
break;
}
}
return count;
}
//法三:包含小字符串则count+1并且将大字符串赋值为其后的字符串再继续检索
static int getDisplayTimes(String s,String s1) {
int count=0;
for (int i = 0; i < s.length(); i++) {
if(s.contains(s1)) {
s=s.substring(s.indexOf(s1)+s1.length(), s.length());
count++;
}
}
return count;
}
2.给定一个路径取其后缀名并输出:
static void getSuffix(String path){
String p=path.substring(path.lastIndexOf('.'));
System.out.println(p);
}
3.固定字符在一个字符串中出现的次数:
static int getCharCount(String s,char ch){
int count=0;
for(int i=0;i<s.length();i++){
char q=s.charAt(i);
if(q==ch){
count++;
}
}
return count;
}
4.将字符数组char[] ch={‘a’,‘b’,‘c’};转换为字符串缓冲对象对象,列举三种方法实现
//法一:
char[] ch={'a','b','c'};
StringBuffer sb=new StringBuffer();
for(int i=0;i<ch.length;i++){
sb.append(ch[i]);//sb.insert(i,ch[i]);
}
//法二:
char[] ch={'a','b','c'};
StringBuffer sb=new StringBuffer(String.valueOf(ch));
// StringBuffer sb=new StringBuffer(Arrays.toString(ch));
//法三:
char[] ch={'a','b','c'};
String s="";
for(int i=0;i<ch.length;i++){
s=s+ch[i];
}
StringBuffer sb=new StringBuffer(s);
5.写一个方法要求如下:
1)字符串长度固定32位
2)其中序号3位,从1开始到999结束。不满3位时左补空格补满3位
3)字母从序号的最后一位开始每四个空格输出一个字母,也就是说每组字母加上空格一共占5位。一共输出四个字母
4)要求每一组字母是随机出现的不可重复的大写字母。
例如:
<中间略>
public class StringTest {
public static void main(String[] args) {
StringBuffer s = new StringBuffer(32);
for (int i = 0; i < 1000; i++) {
s.delete(0, s.length());
int j, count = 0;
char[] ch = new char[4];
if (i < 10) {
s.append(" ").append(i);
}else if (i < 100) {
s.append(" ").append(i);
} else {
s.append(i);
}
for (;;) {
char c = (char) (Math.random() * (26) + 65);
for (j = 0; j < ch.length; j++) {
if (c == ch[j]) {
break;
}
}
if (j == ch.length) {
ch[count] = c;
count++;
if (count == 4) {
break;
}
}
}
for (int k = 0; k < 4; k++) {
s.append(" ").append(ch[k]);
}
System.out.println(s);
}
}
}
//随机数去重方法可参考下方链接:
随机数去重方法