長い文字列(4324文字)を作成する必要があり、この目的でStringBufferを使用したいと思います。ほとんどの文字列は空白になりますが、一部にはorderdetailsが含まれます。それらは特定の位置に現れなければなりません。この文字列は、会計システムに送られます。
文字列を空白( "")で初期化し、この例では長さを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)
2回目の交換後、内容は次のようになります。
['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));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加