【问题标题】:I am trying to insert a string character to another string. How can I achieve it in java?我正在尝试将字符串字符插入另一个字符串。我怎样才能在java中实现它?
【发布时间】:2018-06-05 03:14:01
【问题描述】:

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

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

    }
}    

我面临的错误是:

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

输出应该是:

0|0&0

【问题讨论】:

  • 您发布的代码为我生成了&amp;00 作为输出,它看起来应该是这样的...... b 和 | 从未使用过。
  • 在使用 b 时遇到错误。所以我尝试使用 & 来做
  • stackoverflow.com/questions/537174/… 的可能重复项 - 检查那里的答案;他们可能会有所帮助。
  • 我觉得第一个a.substring(0,i-1)应该是a.substring(0,i)
  • 欢迎来到 SO。发布的代码不会产生错误。您正在尝试将 "&amp;" 添加到字符串中,那么为什么您期望输出为 0|0|0 ?同样从输出中您可以看到循环只运行一次。

标签: java join


【解决方案1】:

从您的问题中不清楚您处理此问题的“规则”究竟是什么。但是,您的输出似乎只是在源 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());

【讨论】:

  • 但想法不是在每个字符之间插入|。如果b = "/\\" 这应该根据问题输出0/0\0...
  • 是的,这个问题根本不清楚。问题中没有任何地方可以解释......
  • 我的问题?再次检查 ;-) 只是一个提示,OP 名称在 cmets 中的灰色矩形中 -> Averty micc
  • 我编辑了我的评论;肯定假设你是 OP,因为你声称这个问题说了一些它没有说的东西。 :P
  • @AxelH 你说得对。我正在尝试将 ant 类型的字符插入字符串。我现在将指定。很抱歉造成混乱。知道怎么做。
【解决方案2】:

正确的代码应该是a.substring(0,i)。

【讨论】:

  • 只是a.substring(0,i)?这是合并两个 String 的短代码!请参阅How to Answer。
【解决方案3】:

您可以使用String.toCharArray 从String 中获取char[]。这样我们就可以更轻松地使用索引对String 进行迭代。

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

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

然后,我们要做的就是合并两个数组(来自Strings),从两者中取一个字符。添加两个条件(每个数组一个)以防止任何 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 &lt; arrayA.length &amp;&amp; i &lt; 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

【讨论】:

    【解决方案4】:

    这是一个单一的解决方案:

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

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

    见live demo。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      相关资源
      最近更新 更多