如何在固定长度字符串或字符缓冲区中的特定位置写入

时间:2011-10-21 12:37:10

标签: java

我需要创建固定长度的记录,这些记录主要由空间组成,但在某些已知的位置上人口稀少。基本上我需要生成的是遗留文件格式,其中记录由大量固定长度字段组成。我只需要填充一些这些字段,所以我想首先创建空间缓冲区,并在特定位置写入特定长度的格式化字段

4 个答案:

答案 0 :(得分:2)

考虑将StringUtils用于leftPad,rightPad,center和repeat。 http://www.jdocs.com/lang/2.1/org/apache/commons/lang/StringUtils.html

当你自己创造结果时,这会有所帮助,所以你真的不需要处理位置和子串......

答案 1 :(得分:1)

试试这个:

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---

答案 2 :(得分: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();
  }
}

答案 3 :(得分:0)

您可能希望实现一个表示固定长度记录的类,并且该类知道记录中的每个字段。默认为所有空格,并为您关注的字段提供设置器。

在内部,实施取决于您。也许Thomas和user1001027的答案组合似乎是合理的。