我试图将字符串字符插入另一个字符串。我怎样才能在java中实现它?

时间:2018-06-05 03:14:01

标签: java join

这是我正在处理的代码。我不知道我哪里出错了。

package mcdcpairwise;
import java.io.*;
import java.util.*;

public class Permutation
{
    public static void main(String[] args)
    {
        String a="000";
        String b="|&";

        for (int i=0; i < a.length(); i++){
            if (i % 2 != 0){
                a = a.substring(0,i-1) + b.substring(0,i-1). + a.substring(i, a.length()) + b.substring(i, b.length());
                System.out.println(a);
            }
        }

    }
}    

我面临的错误是:

  

线程中的异常&#34; main&#34; java.lang.StringIndexOutOfBoundsException:   字符串索引超出范围:-2 at   java.lang.String.substring(String.java:1967)at   mcdcpairwise.Permutation.main(Permutation.java:13)

输出应为:

  

0 | 0&安培; 0

4 个答案:

答案 0 :(得分:0)

正确的代码应为a.substring(0,i)

答案 1 :(得分:0)

从您的问题中不清楚您的“规则”是什么用于处理此问题。但是,您的输出似乎只是在源a字符串的每个字符之间插入一个字符。

不使用子字符串,而是创建单独的StringBuilder以添加单个字符。下面的代码生成您正在寻找的输出:

String string = "000";
StringBuilder output = new StringBuilder();

for (int i = 0; i < string.length(); i++) {

    // Get current character in the string
    char c = string.charAt(i);

    // Add the current character to the output
    output.append(c);

    // If more characters exist, add the pipe
    if (i != string.length() - 1) {
        output.append("|");
    }
}

System.out.println(output.toString());

答案 2 :(得分:0)

您可以使用String.toCharArraychar[]获取String。这样我们就可以使用索引更轻松地迭代String

String a="000";
String b="|&";

char[] arrayA = a.toCharArray();
char[] arrayB = b.toCharArray();

然后,我们所要做的就是合并两个数组(来自String s)从两个数据中取一个字符。添加两个条件(每个数组一个)以防止任何ArrayIndexOutOfBOundsException,我们可以确保我们将合并两个数组。

StringBuilder sb = new StringBuilder();

//Add a char from both array (until we reach on of the limit)
int i = 0;
while( i < arrayA.length && i < arrayB.length){
    sb.append(arrayA[i]).append(arrayB[i]);
    ++i;
}

然后我们只需要在两个数组上使用for循环添加剩余的字符。由于至少有一个先前条件(i < arrayA.length && i < arrayB.length)已经false,因此只会触发其中一个循环(或不触发)。

//Add the rest of `a` if any
for(int j = i; j < arrayA.length; ++j){
    sb.append(arrayA[j]);
}

//Add the rest of `b` if any
for(int j = i; j < arrayB.length; ++j){
    sb.append(arrayB[j]);
}

System.out.println(sb.toString());
  

0 | 0&安培; 0

答案 3 :(得分:0)

这是一个单行解决方案:

System.out.println((a + b).replaceAll("(?<=.)(?=.{" + (a.length() - 1) + "}(.))|.(?=.{0," + (b.length() - 1) + "}$)", "$1"));

这适用于非空白起始字符串的所有组合。

请参阅live demo