Java结合两个字符串

时间:2015-06-04 09:05:44

标签: java string

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

  1. 字符串中的符号是轮流取的(第一个字符串第一个符号,第二个字符串第一个符号,第一个字符串第二个符号,依此类推):“jv”+“aa”=“java”。

    < / LI>
  2. 如果较短的字符串到达​​结尾,则来自另一个字符串的所有符号将添加到已结束的字符串的末尾:“h”+“ello”=“hello”。

  3. 这是我到目前为止所做的:

        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;
     }
    

7 个答案:

答案 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的解决方案(我已经投了票)。