例如,string =" abcdefgh"。如果n = 2,则输出应为" badcfehg";如果n = 3,则输出应为" CBAFEDHG"。我知道我应该使用StringBuilder逆转,但是如何将字符串分为n个部分,然后倒转每个部分?
我不会为您提供代码,您需要通过尝试学习。
逐步进行此要求:
- 如何按块读取
String
块:循环中的String.substring(int, int)
。您需要了解如何计算每个块的界限 - 如何反转
String
:请参阅有关java中的字符串
中的反向 - 通过混合这两个步骤来创建输出。
不要尝试一次做所有事情。查找如何分离完成这两个,然后将逻辑放在一起。这很简单。
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
,以便将其添加到其余单词中。希望很好地解释它。
我已经给了您大部分代码,但它未完成。您将必须了解我遗漏的内容以及如何解决问题以解决问题。
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);
}
}