java逆置字符串(字符数组)(此字符串中的小字符串使用符号隔开)
要求:不改变使用‘符号’隔开的小字符串中的字符顺序,逆置后也为此格式。
=====》例如:“isd am sad asd lalala” 逆置为:“lalala asd sad am isd”
第一种(代码最少)无特殊输出要求:
输出形式为遍历字符串数组:
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
//split()方法将字符串以空格分隔开并删除空格,顺序输入到一个字符串数组中
//也可以以其他字符分开,将空格替换为其他的字符也可以
String[]s=str.split(" ");
for (int i=s.length-1;i>=0;i--){
System.out.print(s[i]); //从后往前遍历得到字符串数组的元素
if (i!=0){
System.out.print(" "); //如果不为第一个字符串就+空格
}
}
}
第二种(代码也很少)要求输出格式为String字符串:
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.nextLine();
String[]s=str.split(" ");
StringBuilder stringBuilder=new StringBuilder();
for (int i=s.length-1;i>=0;i--){
stringBuilder.append(s[i]);
if (i!=0){
stringBuilder.append(" "); //字符串拼接
}
}
String string=stringBuilder.toString();
System.out.println(string);
}
第三种(最为繁琐)对字符串方法不熟悉可以使用:
public static void swap(char[] chars,int a,int b){ //逆序字符数组函数swap
char temp;
for(;a<b;a++,b--){
temp=chars[a];
chars[a]=chars[b];
chars[b]=temp;
}
}
public static char[] reversesentence(String str){
char[] chars=str.toCharArray(); //字符串转换为字符数组
swap(chars,0,chars.length-1); //逆序整个字符数组s
int count=0;
int j=0;
int i=0;
for(;i<chars.length;i++){
count++; //count计算当前字符个数(包含空格)
//此if语句到最后一个小字符串之前的空格结束,导致最后一个小字符串无法逆置
if(chars[i]==' '){
swap(chars,count-j-1,count-2);
j=0;
}else
{ j++;} //j计算两空格之间的字符个数
}
//上述for循环到最后一个小字符串之前判空截止, 因此最后一个小字符串单独逆置
if (i==chars.length){
swap(chars,chars.length-j,chars.length-1);
}
return chars;
}
public static void main(String[] args) {
System.out.println(reversesentence("isd am sad asd lalala"));
}