代码之家  ›  专栏  ›  技术社区  ›  Mark Lakewood

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

  •  2
  • Mark Lakewood  · 技术社区  · 17 年前

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

    我想我需要做的是创建一个类,该类有一个数据字段字符串和一个指定字符串长度的长度。然后以某种方式限制它,这样字符串就永远不会超过这个长度,要么是通过拨出、用空白填充(如果数据输入小于长度),要么是截断结尾以使数据适合。

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

    我的第二个问题是,如果我确实滚动自己的类,如何确保在构造类时,内部字符串的初始值小于指定的长度,我在别处读到构造函数应该返回一个值,但构造函数引发异常是否有效?

    谢谢你的帮助。

    4 回复  |  直到 17 年前
        1
  •  3
  •   CPerkins    17 年前

    这是我的看法——它满足了你问题中的所有要求。你会注意到我选择了拒绝非法分配 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();
       }
    }
    
    
    
        2
  •  2
  •   KV Prajapati    17 年前

    使用 printf 或 format

    System.out.printf("\n%-5d%-20s",10,"Hello");
    
        3
  •  2
  •   Jonathan Holloway    17 年前

    可以使用stringutils,它是commons lang的一部分,并使用以下方法:

    String rightPad(java.lang.String str, int size, char padChar) 
    

    这样地:

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

    然后你可以把它写到一个文件中——看看commons-io-fileutils,找到一个简单的方法来编写一个字符串…

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

        4
  •  0
  •   Vinay Sajip    17 年前

    你可以这样做:

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