Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结合两个字符串的Java_Java_String - Fatal编程技术网

结合两个字符串的Java

结合两个字符串的Java,java,string,Java,String,我正在尝试使用下面的规则编写一个组合两个字符串的函数 字符串中的符号依次使用(第一个字符串第一个符号、第二个字符串第一个符号、第一个字符串第二个符号等等):“jv”+“aa”=“java” 如果较短的字符串到达末尾,则另一个字符串中的所有符号将添加到已结束的字符串的末尾:“h”+“ello”=“hello” 这就是我到目前为止所做的: public static void main(String[] args) { String aa = "jv"; St

我正在尝试使用下面的规则编写一个组合两个字符串的函数

  • 字符串中的符号依次使用(第一个字符串第一个符号、第二个字符串第一个符号、第一个字符串第二个符号等等):“jv”+“aa”=“java”

  • 如果较短的字符串到达末尾,则另一个字符串中的所有符号将添加到已结束的字符串的末尾:“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;
     }
    
    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
    。但这里的代码并没有那么简单。