我有一个问题,其中有两个字符串,只有在执行函数时我才能知道其中一个的长度。我想编写我的函数,使其采用这两种st式,并根据其中的一种较长,计算出最终字符串,如下所示:
finalString = longerStringChars1AND2
+ shorterStringChar1
+ longerStringChars3and4
+ shorterStringChar2
+ longerStringChars5AND6
...依此类推,直到SHORTER STRING结束为止。
较短的字符串结束后,我想将较长的字符串的其余字符附加到最终字符串,然后退出。我已经写了一些代码,但是我喜欢循环太多。有什么建议么?
这是我写的代码-非常基本-
公共静态字节[] generateStringToConvert(String a,String b){
(字符串b的长度通常为14。)
StringBuffer stringToConvert = new StringBuffer();
int longer = (a.length()>14) ? a.length() : 14;
int shorter = (longer > 14) ? 14 : a.length();
int iteratorForLonger = 0;
int iteratorForShorter = 0;
while(iteratorForLonger < longer) {
int count = 2;
while(count>0){
stringToConvert.append(b.charAt(iteratorForLonger));
iteratorForLonger++;
count--;
}
if(iteratorForShorter < shorter && iteratorForLonger >= longer){
iteratorForLonger = 0;
}
if(iteratorForShorter<shorter){
stringToConvert.append(a.charAt(iteratorForShorter));
iteratorForShorter++;
}
else{
break;
}
}
if(stringToConvert.length()<32 | iteratorForLonger<b.length()){
String remainingString = b.substring(iteratorForLonger);
stringToConvert.append(remainingString);
}
System.out.println(stringToConvert);
return stringToConvert.toString().getBytes();
}
最佳答案
您可以使用StringBuilder
来实现。请在下面找到源代码。
public static void main(String[] args) throws InterruptedException {
int MAX_ALLOWED_LENGTH = 14;
String str1 = "yyyyyyyyyyyyyyyy";
String str2 = "xxxxxx";
StringBuilder builder = new StringBuilder(MAX_ALLOWED_LENGTH);
builder.append(str1);
char[] shortChar = str2.toCharArray();
int index = 2;
for (int charCount = 0; charCount < shortChar.length;) {
if (index < builder.length()) {
// insert 1 character from short string to long string
builder.insert(index, shortChar, charCount, 1);
}
// 2+1 as insertion index is increased after after insertion
index = index + 3;
charCount = charCount + 1;
}
String trimmedString = builder.substring(0, MAX_ALLOWED_LENGTH);
System.out.println(trimmedString);
}
输出量
yyxyyxyyxyyxyy
关于java - Java中的花式循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12247372/