我尝试使用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
答案 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;字符。