一、输入一个英文句子,反转句子中各单词顺序,但单词内字符的顺序不变
例如:输入“i am a student”,输出"student a am i"。
思路:1.将整个字符串倒置
2.以空格为界,倒置字符
//交换字符
public static void swap(char[]arr,int begin,int end){
char temp;
while(end>begin){
temp=arr[begin];
arr[begin]=arr[end];
arr[end]=temp;
end--;
begin++;
}
}
//功能实现
public static String changeOrder(String str){
char[] ch=str.toCharArray(); //将字符串转成字符数组
//System.out.println(Arrays.toString(ch));
char temp;
int begin=0,end=0;
int i=0;
int srcLen=ch.length;
//转换整个字符串
swap(ch,i,srcLen-1);
//以空格为单位,转换空格前后字符顺序 使单词正序
for(int j=0;j<srcLen;j++){
if(ch[j]!=' '){
begin=j;
while(ch[j]!=' '&& (j+1)<srcLen){ //为保证不越界
j++;
}
if(j==srcLen-1){
end=srcLen-1;
}else {
end=j-1;
}
}
swap(ch,begin,end);
}
String string=String.copyValueOf(ch); //字符数组生成字符串
return string;
}
运行结果:
另一种情况:当str为“student”时:
二、将指定字符换成任意字符
例如:将字符串“I am a student”中“a”,换成3个“$”
public static int getCount(char[] ch,char arc){ //统计要改的字符数
int count=0;
for(int i=0;i<ch.length;i++){
if(ch[i]==arc){
count++;
}
}
return count;
}
public static String replace(String str,char src,int num,char aim){
char[] ch=str.toCharArray(); //将字符串对象中的字符转换为一个字符数组:ch=str
int srcLen=ch.length;
int count = getCount(ch,src);
ch= Arrays.copyOf(ch,ch.length+count*(num-1)); //将数组一次性扩容为能容纳修改后字符的大小
int i=srcLen-1; //遍历原数组大小
int j=ch.length-1; //遍历新数组大小
while(i!=j){
if(ch[i]!=src){
ch[j--]=ch[i--];
}else{
for(int z=0;z<num;z++){
ch[j--]=aim;
}
i--;
}
}
String string =String.copyValueOf(ch); //字符数组生成字符串
return string;
}
三、将字符串从左数第n个开始进行旋转
例如:String str = “abcdef”;从第2个开始旋转,旋转后的结果为: ”cdefab”
public static String rotateString(String str,int n){ //n表示从第几位开始左旋
char[] ch=str.toCharArray();
swap(ch,0,n-1);
swap(ch,n,str.length()-1);
swap(ch,0,str.length()-1);
String string =String.copyValueOf(ch); //字符数组生成字符串
return string;
}
- 功能测试
public static void main(String[] args) {
String str=changeOrder("i am a student"); //i am a student
System.out.println("以单词为界 反转字符串结果为:"+str);
String string=replace("I am a student",'a',3,'$');
System.out.println("更改指定字符结果为:"+string);
String s=rotateString("abcdefg",3);
System.out.println("左旋字符串结果为:"+s);
}
- 运行结果: