java - java中有没有类似于StringBuilder的类,唯一的区别就是它的长度是固定的?

标签 java stringbuilder charsequence

像这样:

MyFixedLengthStringBuilder sb = new MyFixedLengthStringBuilder(2);
sb.append("123"); // <=== throws ArrayIndexOfOutBoundsException!

其余部分完全相同。基本上我需要一个永远不会增长的 StringBuilder

我看到 StringBuilderfinal 所以不能扩展。授权听起来像是我在这里的唯一途径。您是否看到我需要的任何其他技巧/想法/解决方案?

最佳答案

你可以这样。您仍然需要一些重载方法来处理不同的参数计数和类型,但不必是完全委托(delegate)。这只是一个简单的例子。它可以被编入一个类(class)。编辑:修改以处理大多数方法。

interface TriConsumer<T,R,S> {
      public void accept(T t, R r, S s);
}
public class StringBuilderSol {
    static int size = 20;
    static StringBuilder sb = new StringBuilder(size);
    
    
    public static void main(String[] args) {

        execute(sb::append, "This is fun!");
        System.out.println(sb);
        execute(sb::append, "Java!");
        System.out.println(sb);
        execute(sb::delete, 0,3);
        execute(sb::replace,0,1,"I");
        execute(sb::insert, 1, " like ");
        execute(sb::delete, 7,15);
        System.out.println(sb);
        execute(sb::append, "time to crash");
        
    }
    
    public static <T> void execute(Consumer<T> con,
            T v) {
        con.accept(v);
        checkLength();
    }
    
    public static <T,R> void execute(
            BiConsumer<T, R> biCon,
            T index, R val) {
        biCon.accept(index, val);
        checkLength();
    }

    public static <T,R,S> void execute(
            TriConsumer<T, R, S> triCon,
            T index, R arg1, S arg2) {
        triCon.accept(index, arg1, arg2);
        checkLength();
    }
    
    public static void checkLength() {
        if (sb.length() > size) {
            throw new IndexOutOfBoundsException();
        }
    }

}

打印

This is fun!
This is fun!Java!
I like Java!
Exception in thread "main" java.lang.IndexOutOfBoundsException
    at stackOverflow.StringBuilderSol.checkLength(StringBuilderSol.java:50)
    at stackOverflow.StringBuilderSol.execute(StringBuilderSol.java:32)
    at stackOverflow.StringBuilderSol.main(StringBuilderSol.java:25)


另一种选择(但也有其自身的问题)是设置一个定时器来定期检查 StringBuilder 的大小。

关于java - java中有没有类似于StringBuilder的类,唯一的区别就是它的长度是固定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68303405/

相关文章:

java - AppEngine 上的 HikariCP

c# - 这个 AppendFormat 有什么值(value)吗?

用于 MySQL 查询执行的 python StringBuilder

java - strings.xml 问题...无法将 R.string.foo 作为 CharSequence 传递

Android 方法 TextUtils.regionMatches

java - Spring Security - 使用主体登录 OAuth/Google 后如何检索数据(如电子邮件、姓名、图片等)?

java - 从运行时创建的 JTextField 获取值

Android:从 StringArray 资源到 CharSequence[]

java - 如何配置 spring 以忽略无效的 Accept header ?