我正在尝试编写一个使用以下规则组合两个字符串的函数。
字符串中的符号是轮流取的(第一个字符串第一个符号,第二个字符串第一个符号,第一个字符串第二个符号,依此类推):“jv”+“aa”=“java”。
< / LI>如果较短的字符串到达结尾,则来自另一个字符串的所有符号将添加到已结束的字符串的末尾:“h”+“ello”=“hello”。
这是我到目前为止所做的:
public static void main(String[] args) {
String aa = "jv";
String bb = "aa";
System.out.println(combineStrings(aa, bb));
}
public static String combineStrings(String aa, String bb) {
String newstring;
if(aa.length() > bb.length()){
for(int i = 0; i < aa.length(); i++){
newstring = aa.substring(i, 1) + bb.substring(i, 1);
}
} else {
}
return newstring;
}
答案 0 :(得分:3)
所以初始化
String newstring = "";
答案 1 :(得分:1)
通常,对于这种String
操作,建议使用StringBuilder
:
public static String combineStrings(String aa, String bb) {
StringBuilder sb=new StringBuilder(aa.length()+bb.length());
int common=Math.min(aa.length(), bb.length());
for(int ix=0; ix<common; ix++)
sb.append(aa.charAt(ix)).append(bb.charAt(ix));
String longer=aa.length()>bb.length()? aa: bb;
sb.append(longer, common, longer.length());
return sb.toString();
}
答案 2 :(得分:1)
您需要先将newString
初始化为空字符串。
public class CombineStrings {
public static void main(String[] args) {
String aa = "aaaaa111";
String bb = "bbbbb";
System.out.println(combineStrings(aa, bb));
}
public static String combineStrings(String aa, String bb) {
int shorterLength = (aa.length() >= bb.length()) ?
bb.length() : aa.length();
// Initialize newString as empty string
String newString = "";
for (int i = 0; i < shorterLength; i++) {
newString += aa.charAt(i) + "" + bb.charAt(i);
}
newString += (aa.length() > bb.length()) ?
aa.substring(shorterLength) :
bb.substring(shorterLength);
return newString;
}
}
更优化的解决方案是使用StringBuilder代替!
答案 3 :(得分:0)
newstring
未在所有控制点上初始化。 (else
块为空白。)
Java不允许这样做并告知您。
一种解决方案是编写String newstring = null;
并在代码中正确处理null
字符串的可能性。
答案 4 :(得分:0)
你的方法可能无法奏效。您可以使用从0开始的索引计数器创建一个for循环。在循环中从索引位置的两个字符串中获取一个字符,并以正确的顺序将它们添加到结果中。结果不应该是String而是StringBuilder,以避免实现所有中间String结果的实习。如果任一输入字符串用完,则添加其他字符串的剩余部分并退出循环。
答案 5 :(得分:0)
如果我理解正确,您需要根据您的要求加入字符串的功能。 下面应该解决你的问题
public static String combineStrings(String aa, String bb) {
int lenA, lenB, min;
lenA = aa.length();
lenB = bb.length();
min = Math.min(lenA, lenB);
StringBuilder builder = new StringBuilder();
for(int i = 0; i < min; i++){
builder .append(aa.charAt(i));
builder .append(bb.charAt(i));
}
if(min < lenA)
builder .append(aa.substring(min));
if(min < lenB)
builder .append(bb.substring(min));
return builder .toString();
}
答案 6 :(得分:0)
只是为了好玩,这是一个递归变体:
public static String combineStrings(String a, String b) {
if (a.length() > 0 && b.length() > 0) {
return "" + a.charAt(0) + b.charAt(0)
+ combineStrings(a.substring(1), b.substring(1));
} else {
return a + b;
}
}
为了表现,你应该选择Holger的解决方案(我已经投了票)。