Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何限制Java中存储为ArrayList元素的字符串中的字符大小?_Java_String_Arraylist - Fatal编程技术网

如何限制Java中存储为ArrayList元素的字符串中的字符大小?

如何限制Java中存储为ArrayList元素的字符串中的字符大小?,java,string,arraylist,Java,String,Arraylist,我目前有一个Java中字符串的ArrayList,但我想将每个字符串中的字符数截断(或限制)为20个。我找不到这样做的方法 例如: "hello this is one of the descriptions in an array list, please limit me to 20" 应成为: "hello this is one of" 一些可能的方法: 扩展ArrayList并重写其add(…)方法。我不喜欢这个 包装ArrayList,并在添加或修改其内容的公共方法中限制字符数

我目前有一个Java中字符串的
ArrayList
,但我想将每个字符串中的字符数截断(或限制)为20个。我找不到这样做的方法

例如:

"hello this is one of the descriptions in an array list, please limit me to 20"
应成为:

"hello this is one of"
一些可能的方法:

  • 扩展ArrayList并重写其
    add(…)
    方法。我不喜欢这个
  • 包装ArrayList,并在添加或修改其内容的公共方法中限制字符数。这个主意我更喜欢
  • Edit:或者没有
    ArrayList
    ,而是一个
    ArrayList
    ,MyCustomClass的构造函数或setter方法根据需要截断字符串。我也喜欢这个
您可以使用。例如:

String str = "hello this is one of the descriptions in an array list, please limit me to 20";
String str20 = str.substring(0, 20);

在添加字符串的方法中:

public void addString(String str) {
    String truncated = str != null ? str.substring(0, 20) : null;
    strings.add(truncated);
}

假设这是您要更改的预先存在的列表:

public static void truncate20(List<String> strs) {
    for (ListIterator<String> iter = strs.listIterator(); iter.hasNext();) {
        String str = iter.next();
        if (str.length() > 20) {
            iter.set(str.substring(0, 20));
        }
    }
}
publicstaticvoidtruncate20(列表strs){
for(ListIterator iter=strs.ListIterator();iter.hasNext();){
String str=iter.next();
如果(str.length()>20){
iter.set(str.substring(0,20));
}
}
}
创建一个新的列表非常简单-只需
添加
每次迭代即可


如果您想在insert上执行此操作,我建议您为它编写一个不扩展
列表的类。只需给出您需要的有意义的操作。

您也可以简单地拥有一个自定义类的ArrayList,它是一个最多20个字符的数组。当然,缺点是您实际上是在实现Java的字符串类

为什么您更喜欢选项2而不是选项1?因为我倾向于组合而不是继承。例如,如果ArrayList是MVC类型设计结构中模型类的核心,那么在我的model setter方法中,我会在将字符串添加到ArrayList之前截断字符串。包装器类(这里是模型本身)是唯一需要了解截断并拥有处理截断的代码的类。由于模型不太可能需要公开ArrayList的所有方法,因此该类不需要扩展ArrayList。与@rayd09相同的问题,我理解您正在尝试做什么,但在本文中,为什么选项2更好…或者只是您喜欢…:)?@HovercraftFullOfEels+1(非接口LSP子类型的死亡!)不过,您在这个包装器上实现了什么接口吗?@pst:loaded-question,我有点发疯了。迭代器怎么样。你可能比我更清楚!我不认为这个问题真的涉及正则表达式。您确定要将其列为标记吗?请记住使用代码点,而不是字符单位@hovercarft删除了regex标记,感谢您的注意!