使用 StringBuffer 替换整个长字符串中的子字符串
Use StringBuffer to replace substring throughout a long string
我需要组成一个长字符串(4324 个字符)并且想为此目的使用 StringBuffer。大多数字符串将是空格,但某些部分包含订单详细信息。他们必须出现在某些位置。该字符串将输入会计系统。
我正在用空格 (" ") 初始化字符串并设置长度,在此示例中为 64。
public class BytteTekst {
public static void main(String[] args) {
String t1 = "Hej, jeg æder blåbærsyltetøj!";
String t2 = "foo";
StringBuffer s = new StringBuffer(" ");
s.setLength(64);
System.out.println(t1.length());
s.replace(0, t1.length(), t1);
System.out.println(s);
s.replace(t1.length() + 10, t1.length() + t2.length() + 10, t2);
System.out.println(s);
System.out.println(s.length());
}
}
java BytteTekst
的输出是
29
Hej, jeg æder blåbærsyltetøj!
Hej, jeg æder blåbærsyltetøj!foo
64
当我替换 () 字符串时 foo
它出现在第一个替换 () 之后。我需要一些空格才能得到类似这样的结果:
29
Hej, jeg æder blåbærsyltetøj!
Hej, jeg æder blåbærsyltetøj! foo
64
我是不是用错了StringBuffer?它是否默默地忽略了我要添加的空格?
问题是
s.setLength(64);
将长度更改为 64,用 [=16=]
个字符填充新的 space:其内容将是:
[' ', '[=11=]', '[=11=]', ... '[=11=]'] (1 space, 63 [=11=]s)
第二次替换后,内容将是:
['H', 'e', 'j', ... 't', 'ø', 'j', '!', '[=12=]' (x10), 'f', 'o', 'o', '[=12=]', ...]
所以那里是白色space那里,就是non-printed白色space.
如果您想用 space 填充您的字符串,而不是 '[=17=]'
,您可以使用普通的 for 循环遍历字符串
for (int i = 0; i < 64; ++i) s.setCharAt(i, ' ');
或 hard-code 一串具有正确长度的 space:
StringBuffer s = new StringBuffer(" "); // Not 64 chars - count carefully!
或者您可以 "simply" 初始化一个 char[]
并填充 spaces:
char[] fill = new char[64];
Arrays.fill(fill, ' ');
StringBuffer s = new StringBuffer(new String(fill));
我需要组成一个长字符串(4324 个字符)并且想为此目的使用 StringBuffer。大多数字符串将是空格,但某些部分包含订单详细信息。他们必须出现在某些位置。该字符串将输入会计系统。
我正在用空格 (" ") 初始化字符串并设置长度,在此示例中为 64。
public class BytteTekst {
public static void main(String[] args) {
String t1 = "Hej, jeg æder blåbærsyltetøj!";
String t2 = "foo";
StringBuffer s = new StringBuffer(" ");
s.setLength(64);
System.out.println(t1.length());
s.replace(0, t1.length(), t1);
System.out.println(s);
s.replace(t1.length() + 10, t1.length() + t2.length() + 10, t2);
System.out.println(s);
System.out.println(s.length());
}
}
java BytteTekst
的输出是
29
Hej, jeg æder blåbærsyltetøj!
Hej, jeg æder blåbærsyltetøj!foo
64
当我替换 () 字符串时 foo
它出现在第一个替换 () 之后。我需要一些空格才能得到类似这样的结果:
29
Hej, jeg æder blåbærsyltetøj!
Hej, jeg æder blåbærsyltetøj! foo
64
我是不是用错了StringBuffer?它是否默默地忽略了我要添加的空格?
问题是
s.setLength(64);
将长度更改为 64,用 [=16=]
个字符填充新的 space:其内容将是:
[' ', '[=11=]', '[=11=]', ... '[=11=]'] (1 space, 63 [=11=]s)
第二次替换后,内容将是:
['H', 'e', 'j', ... 't', 'ø', 'j', '!', '[=12=]' (x10), 'f', 'o', 'o', '[=12=]', ...]
所以那里是白色space那里,就是non-printed白色space.
如果您想用 space 填充您的字符串,而不是 '[=17=]'
,您可以使用普通的 for 循环遍历字符串
for (int i = 0; i < 64; ++i) s.setCharAt(i, ' ');
或 hard-code 一串具有正确长度的 space:
StringBuffer s = new StringBuffer(" "); // Not 64 chars - count carefully!
或者您可以 "simply" 初始化一个 char[]
并填充 spaces:
char[] fill = new char[64];
Arrays.fill(fill, ' ');
StringBuffer s = new StringBuffer(new String(fill));