Java 反转输入字符串,o/p中的单词需要根据输入中每个关键字的长度用空格隔开

Java 反转输入字符串,o/p中的单词需要根据输入中每个关键字的长度用空格隔开,java,string,reverse,Java,String,Reverse,例如: subex is in bangalore o/p: 我尝试使用StringBuffer来使用reverse方法,但这只是简单地反转句子。我需要在输入的相同位置,在倒转的句子中添加空格 我认为在这种情况下没有简单的方法。您需要逐个处理每个字符 StringBuilder builder = new StringBuilder(input.length()); int end = input.length() - 1; for(int i = 0; i < input.leng

例如:

subex is in bangalore
o/p:


我尝试使用
StringBuffer
来使用reverse方法,但这只是简单地反转句子。我需要在输入的相同位置,在倒转的句子中添加空格

我认为在这种情况下没有简单的方法。您需要逐个处理每个字符

StringBuilder builder = new StringBuilder(input.length());

int end = input.length() - 1;

for(int i = 0; i < input.length(); i++){
    if(input.charAt(i) == ' '){
       builder.append(' ');
    }else{
       while(input.charAt(end) == ' ')
           end--;
       builder.append(input.charAt(end--));
    }
}
return builder.toString();
StringBuilder=新的StringBuilder(input.length());
int end=input.length()-1;
对于(int i=0;i
试试这个:

public class test
{    
static void reverseString(String inputString)
{
    char[] inputArray = inputString.toCharArray();
    char[] resultArray = new char[inputArray.length];
    //insert spaces at required positions
    for (int i = 0; i < inputArray.length; i++) 
    {
        if (inputArray[i] == ' ') 
        {
            resultArray[i] = ' ';
        }
    }
    int j = resultArray.length-1;
    //copy every non-space character of inputArray at 'j' position of resultArray
    for (int i = 0; i < inputArray.length; i++)
    {
        if (inputArray[i] != ' ') 
        {
            //If resultArray already has space at index j then decrementing 'j'
            if(resultArray[j] == ' ')
            {
                j--;
            }
            resultArray[j] = inputArray[i];

            j--;
        }
    }
    System.out.println(inputString+" ---> "+String.valueOf(resultArray));
}
   public static void main(String[] args)
   {
        reverseString("subex is in bangalore");
   }
}
公共类测试
{    
静态无效反向限制(字符串输入字符串)
{
char[]inputArray=inputString.toCharArray();
char[]resultArray=新字符[inputArray.length];
//在所需位置插入空格
for(int i=0;i”+String.valueOf(resultArray));
}
公共静态void main(字符串[]args)
{
反向限制(“subex位于班加罗尔”);
}
}
输出:


subex位于班加罗尔-->erola gn ab nisixebus
步骤1:存储空格位置

步骤2:删除给定字符串中的所有空格

步骤3:反转字符串


步骤4:在之前存储的位置添加空白字符。

其他方法,使用
StringBuilder.reverse()
方法:

    String input = "subex is in bangalore";
    StringBuilder result = new StringBuilder(input.replace(" ", "")).reverse();
    int index = input.indexOf(" ");
    while (index >= 0) {
        result.replace(index, index, " ");
        index = input.indexOf(" ", index + 1);          
    }

你也可以试试这个


公共静态void main(字符串[]args){
StringBuilder sb=新StringBuilder(“subex位于班加罗尔”);
StringBuilder sb1=新的StringBuilder();
字符a[]=sb.toString().toCharArray();
字符b[]=(sb.reverse().toString()).replaceAll(“,”).toCharray();

对于(int i=0,j=0;i普通字符数组交换方式

String input = "subex is in bangalore";
char[] array = input.toCharArray();
int len = array.length - 1;

for(int idx1 = 0, rev = 0, idx2 = len - rev; idx1 < idx2; idx1++, rev++, idx2 = len - rev) {
    if(array[idx1] == ' ') 
        ++idx1;

    if(array[idx2] == ' ')
        --idx2;

    char c = array[idx1];
    array[idx1] = array[idx2];
    array[idx2] = c;
}

System.out.println(array); // o/p: erola gn ab nisixebus
String input=“subex在班加罗尔”;
char[]数组=input.toCharArray();
int len=array.length-1;
对于(int idx1=0,rev=0,idx2=len-rev;idx1
这里缺少一些边界检查。另外,nit:使用
input.length()
实例化生成器,这样它就不必调整其内部字符数组的大小。@AndyTurner您指的是
end
的边界,我想没有必要:)谢谢
input.length()
btw.result将在末尾包含一个额外的空格,可以通过trim()轻松删除该空格。`result.toString().trim()`
String input = "subex is in bangalore";
char[] array = input.toCharArray();
int len = array.length - 1;

for(int idx1 = 0, rev = 0, idx2 = len - rev; idx1 < idx2; idx1++, rev++, idx2 = len - rev) {
    if(array[idx1] == ' ') 
        ++idx1;

    if(array[idx2] == ' ')
        --idx2;

    char c = array[idx1];
    array[idx1] = array[idx2];
    array[idx2] = c;
}

System.out.println(array); // o/p: erola gn ab nisixebus