这是我正在处理的代码。我不知道我哪里出错了。
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
答案 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.toCharArray
从char[]
获取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。