2011-10-21 9 views
1

ほとんどの場合、スペースで構成されているが特定の既知の位置にはまばらに配置された固定長レコードを作成する必要があります。本質的に私が作り出す必要があるのは、レコードが多数の固定長フィールドで構成されている従来のファイル形式です。使用を検討固定長lenfth文字列またはcharバッファの特定の位置に書き込む方法

StringBuilder b = new StringBuilder();// Or use StringBufer if you need synchronization 
b.append("----------"); //use dash instead of space for visibility 
int pos = 4; 

String replacement = "foo"; 
b.replace(pos, pos + replacement.length(), replacement); //Attention: if the length of the replacement is greater than the length of the original content, the exceeding chars will be appended 
System.out.println(b); //----foo--- 

答えて

1

をspecifc長さのフォーマットされたフィールドを記述する必要がありますLeftPad、rightPad、center、repeatのStringUtilsのです。 http://www.jdocs.com/lang/2.1/org/apache/commons/lang/StringUtils.html

あなたが本当に位置と部分文字列を処理する必要はありませんので、あなたは私がスペースの文字列を作成することから始めないと...、これは役立つだろう、あなたの自己によって

+0

ありがとうございます - 私は、StringBuilderのドキュメントを見てみましたが、置き換えメソッドが欠けていました。私は、文字列の長さのチェックを追加して、誤ってバッファを展開していないことを確認しました。 if(string.length()> length)throw new new IllegalArgumentException( "入力文字列の長さ>フィールドの長さ"); – Shane

2

:私はこれを試してみてください、私は最初のスペースを完全に空のバッファを作成したいので、これらのフィールドの一握りを移入し、特定の位置で

+0

これは、各フィールドの書式設定には便利ですが、レコードがまばらに読み込まれるため、レコードの100またはそれ以上のフィールドのそれぞれに空白のフィールドを作成する必要はなく、空白の文字列を生成するコードを更新する必要があります。私は新しいフィールドを追加するたびにフィールドを使用しました。私はこの事例の単純さが効率よりも重要だから、私はトーマスのアプローチに行った。 – Shane

0

を、結果を作成していると、その長さはレコードの全長です。私はちょうどStringBuilderクラスを使用し、必要に応じてフィールドを追加します(必要に応じて自動的に増加します)。フィールドをレコードに追加するときに、各フィールドにスペースを追加します。

public class FixedWidthBuilder { 
    private StringBuilder record = new StringBuilder(); 

    public void append(int len, String value){ 
    if (len < value.length()){ 
     value = value.substring(0, len); 
    } else if (len > value.length()){ 
     StringBuilder sb = new StringBuilder(value); 
     for (int i = value.length(); i < len; i++){ 
     sb.append(' '); 
     } 
     value = sb.toString(); 
    } 
    record.append(value); 
    } 

    @Override 
    public String toString(){ 
    return record.toString(); 
    } 
} 
0

固定長レコードを表し、レコードの各フィールドについて知っているクラスを実装したい場合があります。デフォルトでは、すべてのスペースが使用され、気になるフィールドの設定が行われます。

内部的には、実装はあなた次第です。おそらくThomasとuser1001027の回答の組み合わせが合理的だと思われます。

関連する問題