按照第一个单词的长度反转一个字符串

时间:2016-04-13 07:20:31

标签: java string

我是Java Strings的新手。 实际上我有反转单词的代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test2 {

    public static void main(String[] args) throws IOException
    {
        System.out.println("enter a sentence");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String rev =br.readLine();

        String [] bread = rev.split(" ");
        for(int z =bread.length-1;z>=0;z--)
        {
            System.out.println(bread[z]);
        }

    }
}

对于上面的代码,我得到:

  

输入:班加罗尔是一个城市   输出:城市是班加罗尔

但我希望输出如下:

  

输入:班加罗尔是一个城市   输出:cityaisba ng a lore

另一个例子:

  

输入:Hello Iam New To Java.Java是面向对象的语言   输出:语言Ori en tedo bjec ti sjava。 javaToNe wIamolleH

请帮帮我

5 个答案:

答案 0 :(得分:4)

这是你可以做到的一种方式:

    String rev = br.readLine();

    String [] bread = rev.split(" ");
    int revCounter = 0;
    for(int z = bread.length - 1; z >= 0; z--)
    {
        String word = bread[z];
        for(int i = 0; i < word.length(); i++)
        {
            // If char at current position in 'rev' was a space then
            // just print space. Otherwise, print char from current word.
            if(rev.charAt(revCounter) == ' ')
            {
                System.out.print(' ');
                i--;
            }
            else
                System.out.print(word.charAt(i));

            revCounter++;
        }
    }

答案 1 :(得分:0)

当我运行你的代码时,我得到以下结果:

city
a
is
Bangalore

所以要把它放在一行中,为什么不添加空格并打印一行呢?

System.out.println("enter a sentence");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String rev = br.readLine();

String[] bread = rev.split(" ");
for (int z = bread.length - 1; z >= 0; z--) {
    System.out.print(bread[z] + " ");
}

答案 2 :(得分:0)

我没有像GHajba那样检查你的代码的有效性。但是如果你想让空格留在特定的地方,可以选择删除所有空格并根据原始字符串中的索引将它们放回去。

全部删除

newBread = newBread.replace(" ", "");

将它们放回去

StringBuilder str = new StringBuilder(newBread);

for (int index = oldBread.indexOf(" ") ;
     index >= 0 ;
     index = oldBread.indexOf(" ", index + 1)) 
{
    str.insert(index, ' ');
}

newBread = str.toString();

我想出了这个,并且可能有更好的方法来做到这一点,也许没有StringBuilder,但这可能会帮助你,直到找到更好的方法。

答案 3 :(得分:0)

试试这个(我使用了一个字符串作为输入):

    String original = "Bangalore is a city";
    System.out.println("Original : "+original);

    StringBuilder inverted = new StringBuilder();
    StringBuilder output = new StringBuilder();
    String temp = "";

    String[] split = original.split("\\s+");

    for (int i = split.length - 1; i >= 0; i--) {
        inverted.append(split[i]);
    }

    temp = inverted.toString();

    for (String string : split) {
        int currLenght = string.length();
        String substring = temp.substring(0,currLenght);
        temp = temp.replaceAll(substring, "");
        output.append(substring).append(" ");
    }

    System.out.println("Converted : "+output.toString());

答案 4 :(得分:0)

将没有空格的反转词添加到 StringBuffer b = new StringBuffer(); for (int i = bread.length-1; i >= 0 ; i--) { b.append(bread[i]); }

String

然后将原始StringBuffer的空格插入 int spaceIndex, prevIndex = 0; while ((spaceIndex = rev.indexOf(" ", prevIndex + 1)) != -1) { b.insert(spaceIndex, ' '); prevIndex = spaceIndex; }

users