如何使用StringBuilder重建字符串?

时间:2014-12-23 18:43:44

标签: java string substring stringbuilder indexof

我尝试使用StringBuilder重建字符串。我有点不确定使用哪种方法将“'”插回到同一个地方。在下面的代码我正在使用 “insert(int dstOffset,CharSequence s,int start,int end)”方法。我的代码不包含任何错误,但它无法正常运行。

请注意我也将在字符串中转义字符(即=),但我还没有编写那部分代码。目前我正在尝试学习如何拆分字符串然后重建它。

谢谢

public class StringTestProgram 
{
  public static void main(String[] args) 
  {
    String relativeDN = "cn=abc,dn=xyz,ou=abc/def";
    String[] stringData = relativeDN.split(",");
    for (String stringoutput : stringData) 
    {
      System.out.print(stringoutput);
      StringBuilder sb = new StringBuilder(stringoutput); 
      CharSequence charAdded = ",";
      sb.insert(6,charAdded,0,12); 
      System.out.print(sb.toString()); 
    }
  }
}

修订代码

public class StringTestProgram {
public static void main(String[] args) {

String relativeDN = "cn=abc,dn=xyz,ou=abc/def";
System.out.println(relativeDN);

//Split String
String[] stringData = relativeDN.split(",");


{
StringBuilder sb = new StringBuilder();
CharSequence charAdded = ",";

// loop thru each element of the array
for (int place = 0; place < stringData.length; place++) {
System.out.println(stringData[place]);

{

int eq = relativeDN.indexOf('=');
String sub = relativeDN.substring(0, eq);           
System.out.println(sub);

}


// append element to the StringBuilder
sb.append(stringData[place]);

// avoids adding an extra ',' at the end
if (place < stringData.length - 1)

// if not at the last element, add the ',' character
sb.append(charAdded);
}
System.out.print(sb.toString());

}
}
}

我是stackoverflow的新手,我不确定在这个帖子中是否可以提出这个问题,或者我是否应该为这个问题创建一个单独的线程。如果可能请告知。

上面的代码现在将字符串拆分为“,”字符。它也重建了 字符串回到其原始状态。我还想使用indexof和.substring 在“=”符号后获取字符串值的方法。目前我的程序只输出 “=”符号前面的初始字符串值的前两个字符。不知道在哪里 在我的代码中我犯了一个错误。任何帮助将不胜感激。

我的电流输出 CN = ABC,DN = XYZ,OU = ABC / DEF CN = ABC CN DN = XYZ CN OU = ABC / DEF CN CN = ABC,DN = XYZ,OU = ABC / DEF

期望的输出 CN = ABC,DN = XYZ,OU = ABC / DEF CN = ABC ABC DN = XYZ XYZ OU = ABC / DEF ABC / DEF CN = ABC,DN = XYZ,OU = ABC / DEF

5 个答案:

答案 0 :(得分:3)

在Java 8之前执行此操作的最简单方法是对所有元素使用1个StringBuilder,并使用append()方法将添加到构建器

StringBuilder builder = new StringBuilder();

for (String stringoutput : stringData) {
   builder.append(stringoutput).append(',');
}

//have an extra trailing comma so remove it
//use length -1 as end coord because it's exclusive
String result = builder.substring(0, builder.length() -1);

如果您使用的是Java 8,则可以使用新的Stream API和Collectors.joining()

String result = Arrays.stream(relativeDN.split(","))
                   .collect(Collectors.joining(","));

答案 1 :(得分:2)

每次进入循环时,您都在初始化sb,这意味着每次进入循环时都会丢弃StringBuilder并仅使用下一个子字符串重新创建它。

修正:

String relativeDN = "cn=abc,dn=xyz,ou=abc/def";

String[] stringData = relativeDN.split(",");
StringBuilder sb = new StringBuilder();
CharSequence charAdded = ",";

for (String stringoutput : stringData) {
    System.out.print(stringoutput);
    sb.append(stringoutput).append(charAdded); 
}

sb.setLength(sb.length() - 1);

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

答案 2 :(得分:0)

像这样:

for (String stringoutput : stringData) 
    sb.append(stringoutput).append(',');

修正:使用此方法,您必须删除最后一个,

String result = sb.toString().substring(0,sb.toString().length()-1);

System.out.println(result);

答案 3 :(得分:0)

我在其他答案中注意到最后会有一个额外的逗号。你必须使用一个前缀变量,然后在循环中更改它,这样就不会有额外的逗号。

String relativeDN = "cn=abc,dn=xyz,ou=abc/def";
String[] stringData = relativeDN.split(",");

StringBuilder sb = new StringBuilder();
String prefix = "";
for (String element : stringData) {
    sb.append(prefix);
    prefix=",";
    sb.append(element);
}
String output = sb.toString();

在循环内部附加前缀,但是在第一次循环时,前缀被设置为空引号,以便在第一个元素之前不会是逗号。下一个前缀更改为逗号,以便在下一轮循环中,将在第一个元素后添加逗号。最后,添加元素。这会产生正确的输出,因为逗号是在元素之前添加的,但仅在第一次迭代之后添加。

答案 4 :(得分:0)

试试这段代码

public class StringTestProgram {
    public static void main(String[] args) {
        String relativeDN = "cn=abc,dn=xyz,ou=abc/def";

        String[] stringData = relativeDN.split(",");

        StringBuilder sb = new StringBuilder(); 
        CharSequence charAdded = ",";

        for (int i = 0; i < stringData .length; i++) { //walk over each element of the array
            System.out.println(stringData[i]);
            sb.append(stringData[i]); // append element to the StringBuilder

            if (i < stringData.length - 1) //avoids adding an extra ',' at the end
                sb.append(charAdded); // if not at the last element, add the ',' character
        }

        System.out.print(sb.toString()); 
    }
}

在这里,您将完全按原样重建原始字符串(即不添加尾随符号,&#39;):

cn=abc,dn=xyz,ou=abc/def

UPDATE :在for循环中,我只是遍历存储splitted String的数组的每个元素,并将元素逐个附加到StringBuilder实例。在附加每个元素后,我检查我们当前是否在数组的最后一个元素。如果没有,我追加&#39;,&#39;字符。