Я пытаюсь вставить строковый символ в другую строку.Как я могу добиться этого в Java? - PullRequest
0 голосов
/ 05 июня 2018

Это код, над которым я работаю.Я не знаю, где я иду не так.

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

    }
}    

Ошибка, с которой я сталкиваюсь:

Исключение в потоке "main" java.lang.StringIndexOutOfBoundsException: индекс строки издиапазон: -2 в java.lang.String.substring (String.java:1967) в mcdcpairwise.Permutation.main (Permutation.java:13)

Выходные данные должны быть:

0 | 0 & 0

Ответы [ 4 ]

0 голосов
/ 05 июня 2018

Вот решение в одну строку:

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

Это работает со всеми комбинациями непустых стартовых строк.

См. live demo .

0 голосов
/ 05 июня 2018

Из вашего вопроса не ясно, каковы ваши "правила" для обработки этого.Однако ваш вывод, кажется, просто вставляет символ между каждым символом вашей исходной строки 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());
0 голосов
/ 05 июня 2018

Вы можете использовать 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

0 голосов
/ 05 июня 2018

Правильный код должен быть a.substring(0,i).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...