结合两个字符串的Java
我正在尝试使用下面的规则编写一个组合两个字符串的函数结合两个字符串的Java,java,string,Java,String,我正在尝试使用下面的规则编写一个组合两个字符串的函数 字符串中的符号依次使用(第一个字符串第一个符号、第二个字符串第一个符号、第一个字符串第二个符号等等):“jv”+“aa”=“java” 如果较短的字符串到达末尾,则另一个字符串中的所有符号将添加到已结束的字符串的末尾:“h”+“ello”=“hello” 这就是我到目前为止所做的: public static void main(String[] args) { String aa = "jv"; St
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;
}
publicstaticvoidmain(字符串[]args){
字符串aa=“jv”;
字符串bb=“aa”;
系统输出打印LN(组合线(aa,bb));
}
公共静态字符串组合字符串(字符串aa、字符串bb){
字符串新闻字符串;
如果(aa.length()>bb.length()){
对于(int i=0;i 并非在所有控制点上初始化新闻字符串。(else
块为空)
Java不允许这样做,并且正在通知您
一种解决方案是编写stringnewstring=null编码>并正确处理代码中的null
字符串可能性。因此初始化它
String newstring = "";
通常,对于这种字符串操作,建议使用:
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();
}
公共静态字符串组合字符串(字符串aa、字符串bb){
StringBuilder sb=新的StringBuilder(aa.length()+bb.length());
int common=Math.min(aa.length(),bb.length());
对于(intix=0;ixbb.length()?aa:bb;
sb.append(更长的,常见的,更长的.length());
使某人返回字符串();
}
您的方法可能行不通。您可以创建一个索引计数器从0开始的for循环。在循环中,从索引位置的两个字符串中获取一个字符,并按正确的顺序将其添加到结果中。结果不应是字符串,而应是字符串生成器,以避免将所有中间字符串结果插入。If任一输入字符串用完,然后添加另一个字符串的其余部分并退出循环。您需要首先将新闻字符串初始化为空字符串
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;
}
}
公共类组合{
公共静态void main(字符串[]args){
字符串aa=“aaaa111”;
字符串bb=“bbbbb”;
系统输出打印LN(组合线(aa,bb));
}
公共静态字符串组合字符串(字符串aa、字符串bb){
int shorterLength=(aa.length()>=bb.length())?
bb.length():aa.length();
//将新闻字符串初始化为空字符串
字符串newString=“”;
对于(int i=0;ibb.length())?
aa.子字符串(短长度):
bb.子串(短长度);
返回新闻字符串;
}
}
一个更优化的解决方案是使用!如果我理解正确,您需要函数根据需要连接字符串。
下面应该可以解决你的问题
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();
}
公共静态字符串组合字符串(字符串aa、字符串bb){
int lenA,lenB,min;
lenA=aa.length();
lenB=bb.length();
min=Math.min(lenA,lenB);
StringBuilder=新的StringBuilder();
对于(int i=0;i
为了好玩,这里有一个递归变体:
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的解决方案(我已经投了赞成票)。您的问题是什么?…问题是什么?接下来您想知道什么?那么错误是什么?您不应该期望每个人都编译并运行您的代码。从String newstring=“”开始;
并使用newstring+=…
而不是newstring=…
。虽然您的解决方案应该有效,但您应该使用StringBuffer。字符串合并速度很慢。@Aakash是的,我完全同意这将是一个更好的解决方案!如果您是说,StringBuilder。实际上您应该使用StringBuffer,而不是StringBuffer。请注意,您可以使用StringBuffer将上一条语句简化为newString+=(aa.length()>bb.length()?aa:bb).substring(shorterLength)
@Holger True!那会更好。除非您需要Java 1.4兼容性,否则使用StringBuilder
而不是StringBuffer
是首选。此外,您在末尾附加了一个数字而不是剩余的字符串,这表明您没有真正测试代码…绝对正确。Thank you@Holger。是的,我没有机会测试我的代码,因为我有一台新机器,并且还在配置它。我的错。我测试了它,工作得很好。我现在正在努力想清楚,这段代码对我来说是下一个级别,我是初学者。好的,研究代码并检查,你可能会学到一些有助于解决其他相关问题的东西@sharonbn:这个链接的问题既不涉及循环,也不象does那样只添加另一个字符串的一部分。对于可以表示为a+b
的代码,确实没有必要使用StringBuilder
。但这里的代码并没有那么简单。