gpt4 book ai didi

java - 使用 StringBuffer 替换长字符串中的子字符串

转载 作者:行者123 更新时间:2023-11-30 01:48:09 25 4
gpt4 key购买 nike

我需要编写一个长字符串(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

当我replace()字符串foo时,它出现在第一个replace()之后。我需要有一些空格才能得到类似这样的结果:

29
Hej, jeg æder blåbærsyltetøj!
Hej, jeg æder blåbærsyltetøj! foo
64

我使用 StringBuffer 的方式是否错误?它是否默默地忽略了我要添加的空格?

最佳答案

问题在于

s.setLength(64);

将长度更改为 64,并用 \0 字符填充新空间:其内容将为:

[' ', '\0', '\0', ... '\0'] (1 space, 63 \0s)

第二次替换后,内容将是:

['H', 'e', 'j', ... 't', 'ø', 'j', '!', '\0' (x10), 'f', 'o', 'o', '\0', ...]

所以那里有空白,它只是非打印的空白。

如果您想用空格填充字符串,而不是 '\0',您可以使用普通的 for 循环遍历字符串

for (int i = 0; i < 64; ++i) s.setCharAt(i, ' ');

或硬编码具有正确长度的空格字符串:

StringBuffer s = new StringBuffer("           "); // Not 64 chars - count carefully!

或者您可以“简单地”使用填充空格的 char[] 进行初始化:

char[] fill = new char[64];
Arrays.fill(fill, ' ');
StringBuffer s = new StringBuffer(new String(fill));

关于java - 使用 StringBuffer 替换长字符串中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57160676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com