带有字符串和指定长度的Java类

时间:2009-09-15 05:58:39

标签: java oop exception

我正在创建一个创建文件的java程序,并用字符串形式的数据填充它,并且记录中的每个字段都限制为特定的长度。

我认为我需要做的是创建一个具有数据字段字符串的类和一个指定字符串长度的长度。然后以某种方式限制它,使得字符串永远不会超过这个长度,无论是通过bailing,用空格填充(如果数据输入小于长度)或截断结束以便数据适合。

我的第一个问题是,是否已经有一个基本的课程可以做到这一点,或者我应该自己动手。

我的第二个问题是,如果我自己滚动,我如何确保在构造类时内部String的初始值小于指定的长度,我已经读过其他地方构造函数应该返回一个值,但是是否对构造函数引发异常有效?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

这是我的看法 - 它符合您问题中的所有要求。你会注意到我选择用IllegalArgumentException拒绝非法作业。

package com.pragmaticsoftwaredevelopment.stackoverflow;

public class FixedLengthString {
   private String string=null;
   private int length=-1;
   public FixedLengthString(int length) { 
      this.length = length; 
   }
   public void setValue (String str) {
      if (str.length() > length)
         throw new IllegalArgumentException("ERROR: Assigned string length (" + str.length() + ") exceeded given limit (" + length + ")");
      else
         this.string = str;
   }
   public String toString() {
      return String.format("%1$-" + length + "s", string);

   }
   public String getString() { 
      return toString();
   }
}


答案 1 :(得分:2)

使用printfformat

System.out.printf("\n%-5d%-20s",10,"Hello");

答案 2 :(得分:2)

您可以使用StringUtils,它是Commons Lang的一部分并使用以下方法:

String rightPad(java.lang.String str, int size, char padChar) 
像这样:

String myPaddedString = StringUtils.rightPad("Sample string", 20, "*") 

然后你可以将它写入一个文件 - 看看Commons IO FileUtils,以便轻松编写字符串......

关于你的第二点......一个构造函数不能返回一个值,否则它将是一个标准方法,但它可以根据传递给它的参数自由引发异常 - 在这种情况下IllegalArgumentException是最合适的

答案 3 :(得分:0)

你可以这样做:

public class Field {
    // other members not shown
    int length;
    String value;

    public Field(int length, String initialValue) {
        // omitted error check for length > 0
        this.length = length;
        setValue(initialValue);
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        if (value != this.value) {
            if (value == null)
                value = "";
            if value.length() > length)
                value = value.substring(0, length);
            else
                value = String.format("%1$-" + length + "s", value);
            this.value = value;
        }
    }
}