2017-09-06 54 views
-2

例如,string =“ABCDEFGH”。如果n = 2,那么输出应该是“BADCFEHG”;如果n = 3,则输出应该是“CBAFEDHG”。 我知道我应该使用stringbuilder来反向,但我怎么能将字符串拆分为n部分,然后反转每个部分?如何使用java反转n个字符串中的n个字符

+1

欢迎来到SO。在发布StackOverflow的问题/需求之前,你应该做一些研究。请参见[ask],然后编辑你的问题,其中包含一些你的尝试 – AxelH

+0

[在Java中反转字符串]可能的重复(https://stackoverflow.com/questions/7569335/reverse-a-string-in-java) – pedromss

+0

@pedromss我认为这不是一个直接的重复,这个工作N个字母组而不是单个字母 – jrtapsell

回答

1
String newStr=""; 
String oldStr = "ABCDEFGH"; 
for(int i =0; i<oldStr.length();i+=n) { 
    if(i+n >= oldStr.length()){ 
     n = oldStr.length()-i; 
    } 
    newStr += new StringBuilder(oldStr.substring(i,i+n)).reverse().toString(); 
} 

编辑:对于错读你的问题抱歉,这个小循环做你要求的! 我们在这里做的是让oldString.length()/n迭代以n部分分割字符串。因为长度可能不能被你的n分割,所以我们必须检查i+n是否会大于你的单词长度(最终会创建一个IndexOutOfBoundsException)。如果是这种情况,我们只需设置n,这样它就可以增加我对这个词的其他部分。希望解释得很好。

+0

其余的?这是不完整的,你只能扭转N字符的第一个块。 – AxelH

+0

@AxelH抱歉想念你的问题,结帐编辑!你当然可以快捷地声明newString1&2,这样就可以提高可读性。 –

+0

不是我的问题......但你仍然是不正确的,“ABCDEF”应输出为2“BADCFE”而不是“BACDEF”的块。你需要迭代'String'来反转每个块,而不是第一个块和'String'的其余部分。 – AxelH

4

我不会给你这个代码,你需要通过尝试来学习。在一个循环String.substring(int, int)

一步地执行这一要求的步骤:

  1. 如何读取块String块。您需要了解如何计算每个块
  2. 的boundery如何扭转String:看到有关Reverse a String in JAVA
  3. 通过混合这两个步骤中创建的输出。

不要试图一劳永逸。找到如何做到这两个分离,然后把逻辑放在一起。最后这很简单。

0

我已经给你大部分的代码,但它是未完成的。您必须了解我所忽略的内容以及如何解决问题才能完成此问题。

String originalString = someString;   //String from user 
String tempString = "";      //String used for temporary reasons 
String finalString = "";     //Your end result 

int n = someNumber;       //Number from user 

//Loops through the original string, incrementing by n each time 
for (int i = 0; i < originalString.length() - n; i += n) 
{ 
    //Gives us the current substring to reverse 
    tempString = originalString.substring(i, i + n); 

    //Starts at end of substring and adds each char to the final string 
    for (j = n - 1; j >= 0; j--) 
    { 
     finalString += tempString.charAt(j); 
    } 
} 
相关问题