反转字符串的输出不符合预期

时间:2015-12-06 08:31:22

标签: java string

  

给出带有单词的字符串。字符串的反向单词。

样本输入1

Hello World

样本输出

世界你好

MyApproach

要反转单词我首先计算了多少空格。之后我将它们的空间索引存储在一个数组中。使用lastIndex,我打印了数组的最后一个元素。之后我打印了数组的最后两个单词。

static String reverseWords(String inputString)
 {
    int l1=inputString.length();
    int count=1;
    for(int i=0;i<l1;i++)
    {
        char ch=inputString.charAt(i);
        if(ch==' ')
        {
            count++;
        }
    }

    int k=0;
    int[] spaceindex=new int[count];
    spaceindex[0]=0;
    k++;
    for(int i=0;i<l1;i++)
    {
        char ch=inputString.charAt(i);
        if(ch==' ')
        {
            spaceindex[k++]=i+1;
        }
    }

    int p=spaceindex.length-1;
    String strnew="";
    for(int j=spaceindex[p];j<l1;j++)
    {
        char c=inputString.charAt(j);
        strnew=strnew+c;
    }


    p--;
    while(p>=0)
    {
         for(int j=spaceindex[p];;j++)
            {

              char c=inputString.charAt(j);
               if(c==' ')
               {
                   break;
               }
               strnew=strnew+c;

            }   

    }
   return strnew;   
}

InputParameters     ActualOutput                        Expected Output

Hello World         WorldHelloWorldHello(Infinite loop) WorldHello

@Edit我问为什么我写的代码是错的。我试过没有使用任何内置函数(这对我来说是必要的)。这样我认为根据我不是重复的答案。

  

任何人都可以指导我的代码出了什么问题。

5 个答案:

答案 0 :(得分:1)

简单的解决方案:

public static void main(String[] args) {

    String x = "Hello World";
    String[] xArray = x.split(" ");
    String result = "";

    for (int i = xArray.length - 1; i >= 0; i--) {
        result += xArray[i] + " ";
    }
    System.out.println(result.trim()); // World Hello
   }

答案 1 :(得分:1)

代码中的问题是while循环:

each_with_index.to_a

添加 while(p>=0) { strnew = strnew + " "; for(int j=spaceindex[p];;j++) { char c=inputString.charAt(j); if(c==' '){ break; } strnew=strnew+c; } p--; } 将阻止循环无限发生。同时在while循环之后插入p--可确保每个单词之间有空格。

答案 2 :(得分:1)

可以不使用其他数组,拆分或任何其他结构。

有字符数组(如果需要转换为String是不可变的),首先反转数组中的所有字符。其次循环空格和单词中的每个单词反向字符。

答案 3 :(得分:1)

您可以使用StringTokenizer将字符串转换为标记或String.split函数。您可以将此集合推入堆栈并以相反的顺序提取元素。要重新连接字符串,可以使用StringBuilder或StringBuffer。

为了更有效地执行此操作,您可以将字符串转换为字符数组和StringBuilders

String myString = "Here is the String";
char[] myChars = myString.toCharArray();

StringBuilder word = new StringBuilder();
StringBuilder newString = new StringBuilder();
for(int i = myChars.length - 1; --i >= 0;) {
   char c = myChars[i];
   if(c == ' ') {
       newString.append(c);
       newString.append(word);
       word = new StringBuilder();
   } else {
       word.append(c);
   }
}

答案 4 :(得分:1)

我会将实施基于String.lastIndexOf(int)String.substring(int, int)。我得到StringBuilder来构建输出&#34;句子&#34;和while loop以相反的顺序迭代单词。像,

static String reverseWords(String in) {
    StringBuilder sb = new StringBuilder(in.length());
    int space;
    while ((space = in.lastIndexOf(' ')) > 0) {
        sb.append(in.substring(space + 1, in.length())).append(' ');
        in = in.substring(0, space);
    }
    sb.append(in);
    return sb.toString();
}

我使用您提供的样本进行了测试

public static void main(String[] args) {
    System.out.println(reverseWords("Hello World"));
}

获得(按预期)

World Hello