两个不同输入的交替字符

时间:2014-09-21 00:10:22

标签: java

我想使用两个字符串并使用for方法将字符替换为新字符串。

示例:"两个"和"一个"

结果:" townoe"

这是我到目前为止所做的,而且我真的不知道如何完成它。

public class Alternator {   
    String alternate(String a, String b) {
        String s = "";
        for (int i = 0; i < a.length(); i++) {
            s += i;
            System.out.println(s);
        }
        return null;
    }
}

10 个答案:

答案 0 :(得分:1)

public class Alternator{
    public static String alternate(String a, String b){
        String s = "";
        int i = 0;
        while (i < a.length() && i < b.length()){
            s += a.charAt(i) +""+ b.charAt(i); 
            i++;
        }
        while (i < a.length() ){
            s += a.charAt(i); 
            i++;
        }
        while (i < b.length()){
            s += b.charAt(i); 
            i++;
        }
        return s;
    }
    public static void main(String[] args){
        String a = "two", b = "one";
        String s = Alternator.alternate(a,b);
        System.out.println(s);
    }
}

要使用for循环而不是while循环,只需删除带有for行的所有行,如下所示,然后从每个while循环中删除i ++行

for(; i < a.length() && i < b.length(); i++){
//the inside of the loop MINUS THE LINE i++ 
}
for(; i < a.length(); i++){
//the inside of the loop MINUS THE LINE i++ 
}
for(; i < b.length(); i++){
//the inside of the loop MINUS THE LINE i++ 
}

答案 1 :(得分:1)

这是一种紧凑的方式:

String alternate(String a, String b) {
    StringBuilder builder = new StringBuilder();

    int smallerStringLength = Math.min(a.length(), b.length());
    for (int i = 0; i < smallerStringLength; i++) {
        builder.append(a.charAt(i));
        builder.append(b.charAt(i));
    }
    return builder.toString();
}

甚至更优化:

String alternate(String first, String second) {
    char[] firstChars = first.toCharArray();
    char[] secondChars = second.toCharArray();

    int smallerCharsCount = Math.min(firstChars.length, secondChars.length);
    StringBuilder builder = new StringBuilder(smallerCharsCount * 2);
    for (int i = 0; i < smallerCharsCount; i++) {
        builder.append(firstChars[i]);
        builder.append(secondChars[i]);
    }
    return builder.toString();
}

答案 2 :(得分:0)

使用此:

String alternate(String a, String b){
    StringBuilder builder = new StringBuilder();
    final int greaterLength = a.length() > b.length() ? a.length() : b.length();

    for(int i = 0; i < greaterLength; i++){
        if (i < a.length()) {
            builder.append(a.charAt(i));
        }
        if (i < b.length()) {
            builder.append(b.charAt(i));
        }
    }
    return builder.toString();
}

它使用String.charAt方法获取字母,使用StringBuilder创建字符串。

(当给出两个不等长的字符串时,它返回前两个字符的交替,然后只返回剩余的字符串.EG:HelloHi - &gt; { {1}})

答案 3 :(得分:0)

假设两个字符串的长度完全相同,您可以执行以下操作。如果它们的长度不同,那么目前您的提示不会说明您希望如何设置结果字符串。

public class Alternator {
    String alternate(String a, String b) {
        String s = "";
        for (int i = 0; i < 2*a.length(); i++) {
            if (i%2==0) // modular arithmetic to alternate
                s += a.charAt(i/2); // Note the integer division
            else
                s += b.charAt(i/2);
        }
        System.out.println(s);
        return s;
    }
}

或者,更容易,但索引我没有标记字符串s的长度:

public class Alternator {
    String alternate(String a, String b) {
        String s = "";
        for(int i = 0; i < a.length(); i++){
            s += a.charAt(i);
            s += b.charAt(i);
        }
        return s;
    }
}

答案 4 :(得分:0)

根据我读过的评论,您无法理解循环,以及如何将它们与字符串一起使用。

for循环通常用于迭代数组,或执行给定次数的任务。

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

这会给出输出

0
1
2
3
4

for循环从初始化程序的值开始,首先放入int i = 0;

然后检查表达式,for循环的第二部分,如果返回true,则执行大括号内的所有代码。 i < 5;

一旦完成,它就会运行增量器,即for循环的最后一部分。 i++

之后,它再次检查表达式。我想你可以看到这是怎么回事。在表达式返回false之前,for循环的花括号内的所有内容都会反复执行。

可以使用for循环迭代字符串,但不能像使用array[index]的数组一样引用它。您必须将其转换为数组,在String上使用.toCharArray(),并将结果返回到空的char数组char[],或者在字符串上使用.charAt(index)方法。

此代码将遍历一个字符串,并逐个输出每个字符:

for (int i = 0; i < myString.length(); i++) {
    System.out.println(myString.charAt(i));
}

如果字符串的值为“Hello”,则输出为:

H
e
l
l
o

使用它,我们可以使用+ {:

将它们放入一个空字符串,而不是使用System.out.println();输出字符。
myOtherString += myString.charAt(i);

这意味着,如果我们想要一次检查两个字符串,并像你一样替换它们,我们可以同时迭代两个字符串,并将它们添加到一个新字符串中:

myAlternatedString += myString.charAt(i); 
myAlternatedString += myOtherString.charAt(i);

如果MyString仍为“Hello”且myOtherString为“World”,则新字符串为:

Hweolrllod

答案 5 :(得分:0)

以下代码读取2个不同的输入并合并为单个字符串。

public class PrintAlternnateCharacterString {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String a = in.next();
    String b = in.next();

    String mergedString = "";

    int lenA = a.length();
    int lenB = b.length();
    if (lenA >= lenB) {
        for (int i = 0; i < lenA; i++) {
            if (i < lenB) {
                mergedString += a.charAt(i) + "" + b.charAt(i);

            } else {
                mergedString += a.charAt(i);
            }
        }

    }
    if (lenB > lenA) {
        for (int i = 0; i < lenB; i++) {
            if (i < lenA) {
                mergedString += a.charAt(i) + "" + b.charAt(i);

            } else {
                mergedString += b.charAt(i);
            }
        }

    }

    System.out.println("the merged string is-->" + mergedString);

}

}

答案 6 :(得分:0)

public static String stringConcate(String str1,String str2){

    String str3="";
    if(str1!=null && str2!=null && !str1.isEmpty() && !str2.isEmpty()){
            if(str1.length()==str2.length()){
                for(int i=0;i<=str1.length()-1;i++){
                    str3+=str1.charAt(i);
                    str3+=str2.charAt(i);

                }
            }
            if(str1.length()>str2.length()){
                for(int i=0;i<=str1.length()-1;i++){
                    str3+=str1.charAt(i);
                    if(i<str2.length()){
                        str3+=str2.charAt(i);
                    }
                }
            }
            if(str2.length()>str1.length()){
                for(int i=0;i<=str2.length()-1;i++){
                    if(i<str1.length()){
                        str3+=str1.charAt(i);
                    }
                    str3+=str2.charAt(i);
                }
            }
        }
        return str3;

}

答案 7 :(得分:0)

如果字符串长度相同或长度不同,这将起作用。

static void mergeStrings(String a, String b) {
    StringBuilder mergedBuilder = new StringBuilder();
    char[] aCharArr = a.toCharArray();
    char[] bCharArr = b.toCharArray();

    int minLength = aCharArr.length >= bCharArr.length ? bCharArr.length : aCharArr.length;

    for (int i=0; i<minLength; i++) {
        mergedBuilder.append(aCharArr[i]).append(bCharArr[i]);
    }

    if(minLength < aCharArr.length) {
        mergedBuilder.append(a.substring(minLength));
    }
    else{
        mergedBuilder.append(b.substring(minLength));
    }
    Systemout.println(mergedBuilder.toString());
}

答案 8 :(得分:0)

    String str1 = "one"; String str2 = "two";
    StringBuilder sb = new StringBuilder();
    int i = 0;
    for (; i < str1.length() && i < str2.length(); i++) {
        sb.append(str1.charAt(i)).append(str2.charAt(i));
    }
    for(; i < str1.length(); i++) {
        sb.append(str1.charAt(i));
    }
    for(; i < str2.length(); i++) {
        sb.append(str2.charAt(i));
    }
    System.out.println("result  = " + sb.toString());// otnweo

这也将处理不同的长度

答案 9 :(得分:0)

使用非常简单的if...else可能会带来麻烦。

public static void main(String... args) {
    int[] one = { 1, 2, 3 };
    int[] two = { 44, 55, 66, 77, 88 };
    System.out.println(Arrays.toString(alternate(one, two)));
}

public static int[] alternate(int[] one, int[] two) {
    int[] res = new int[one.length + two.length];

    for (int i = 0, j = 0, k = 0; i < res.length; i++) {
        if (i % 2 == 0)
            res[i] = j < one.length ? one[j++] : two[k++];
        else
            res[i] = k < two.length ? two[k++] : one[j++];
    }

    return res;
}

输出:

[1, 44, 2, 55, 3, 66, 77, 88]