常见功能:
一、获取和判断
1、根据位置获取字符
char charAt(int index):
2、根据字符获取字符在字符串中位置:
int indexOf(int ch):返回第一次出现的位置
int indexOf(int ch,int fromIndex):从fromIndex开始,返回ch在字符串中出现的位置
int indexOf(String str):返回第一次出现的位置
int indexOf(String str,int fromIndex):从fromIndex开始,返回str在字符串中出现的位置,若未找到返回-1.
反向索引:
int lastIndexOf(int ch):返回第一次出现的位置(角标从左到右)
判断:
1、 判断字符串中是否包含某一个子串:boolean contains(str)
特殊:indexOf(str):可以索引str第一次出现位置,也可以用于对指定判断是否包含
if(str.indexOf("aa")!=-1)
2、字符串中是否含有内容:boolean isEmpty(),
3、字符串是否以指定内容开头/结尾:boolean startsWith(str) 和 endsWith()
4、 字符串内容是否相同:equals
字符串内容是否相同,忽略大小写:blloean equalsIgnoreCase()
二、转换
1、将字符数组转成字符串:
构造函数String(char[]):
String(char[],offest,count):一部分转换
示例:char[] ch ={'a','b','c','d','e','f'};
String s = new String(ch); //abcdef
String s = new String(ch,1,3); //bcd
静态方法:static String copyValueOf(char[])
static String copyValueOf(char[] ch,int offest,int count )
2、将字符串串转成字符数组:
char[] = arr.toCharArray();
3、将字节数组转换成字符串:
String(byte[]):
String(byte[],offest,count):一部分转换
4、将字符串转换成字节数组:
byte[] = arr.getBytes();
5、将基本数据类型转换成字符串:static String valueOf(int/double) //String.valueOf(3);
6、将字符串转成大写或小写:String toUpperCase();
三、切割和替换
切割:String[] split(regex):
示例:String s="karry,windy,jane";
String[] str = s.split(",");
子串:String subString(begin):
String subString(begin,end):包含头不包含尾
e.g:String s="abcdef;
s.subString(2); //cdef
s.subString(2,4); //cd
替换:replace(oldchar,newchar), //替换空格
四、比较和去除空格
将字符串两端空格去掉:String trim();
对字符串进行自然顺序比较: int compareTo(String); //正数,0,负数,1的ASCII码值是49
练习:
1、模拟一个trim方法,去除字符串两端的空格。
思路:1)判断第一个位置是否为空格,若是继续向下判断,直到不是空格为止(while循环,增量)。结尾处判断也是
2)当开始和结尾都判断到不是空格时,即所求
程序代码:
import java.util.Scanner;
/*
设置2个指针,
*/
public class DelKong {
public static void main(String[] args){
System.out.println("请输入一个字符串:");
Scanner sc = new Scanner(System.in);
String str=sc.nextLine();
System.out.println(delKong(str));
}
public static String delKong(String str){
int start=0,end=str.length()-1;
while(start<=end && str.charAt(start)==' '){
start++;
}
while(start<=end && str.charAt(end)==' '){
end--;
}
return str.substring(start,end+1);
}
}
用例设计:" abcde","abc "," aa "," ","ab c de"
2、将一个字符串进行反转,将指定部分进行反转。
import java.util.Scanner;
public class Test {
public static void main(String[] args){
System.out.println("请输入一个字符串:");
Scanner sc = new Scanner(System.in);
String str=sc.nextLine();
System.out.println(reverseString(str));
}
public static String reverseString(String s){
char[] ch=s.toCharArray(); //1.变成数组
reverse(ch); //2.数组反转
return new String(ch); //3.变成字符串
}
public static void reverse(char[] ch){
int front=0,end=ch.length-1;
while(front<end){
swap(ch,front,end);
front++;
end--;
}
}
public static void swap(char[] ch,int x,int y){
char temp=ch[x];
ch[x]=ch[y];
ch[y]=temp;
}
}
//部分反转
public static String reverseString(String s,int start,int end){
char[] ch=s.toCharArray(); //1.变成数组
reverse(ch,start,end); //2.数组反转
return new String(ch); //3.变成字符串
}
public static void reverse(char[] ch,int x,int y){
int front=x,end=y-1;
while(front<end){
swap(ch,front,end);
front++;
end--;
}
}
3、获取一个字符串在另一个字符串中出现的次数
/*
1.定义计数器
2.获取子串第一次出现的位置
3.从第一次出现的位置后剩余的字符串中继续获取子串出现的位置,(index+子串长度)
每获取一次计数一次
4。当获取不到时计数完成(while循环)
*/
public class SubStringCount {
public static int getSubCount(String str,String sub){
int count=0;
int index=0;
while((index=str.indexOf(sub))!=-1){
str=str.substring(index+sub.length());//产生好多字符串
count++;
}
return count;
}
//方法二:
public static int getSubCount_2(String str,String sub){
int count=0;
int index=0;
while((index=str.indexOf(sub,index))!=-1){
index+=sub.length();
count++;
}
return count;
}
public static void main(String[] args){
String s="adbcabcdeabugtabb";
System.out.println(getSubCount(s,"ab"));
}
}
4、获取两个字符串中最大相同子串,第一个动作:将短串进行长度依次递减的子串打印。
/*
短串长度递减,看长串是否包含
0~length-0 比较1次
0~length-1 比较2次
0~length-2 比较3次
*/
public class MaxSubString {
public static String getMaxSubString(String s1,String s2){
String max="",min="";
max=(s1.length()>s2.length())?s1:s2;
min=(max==s1)?s2:s1;
for(int i=0;i<min.length();i++){
for(int j=0,k=min.length()-i;k!=min.length()+1;j++,k++){
String temp=min.substring(j,k);
if(max.contains(temp))//if(s1.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
public static void main(String[] args){
String s1="abcwerthelloyuido";
String s2="cvhellobnm";
System.out.println(getMaxSubString(s1,s2));
}
}