StringBuilder 未初始化为给定的长度值

问题描述

我正在尝试创建一个具有给定长度的 StringBuilder 对象,但每次尝试这样做时,StringBuilder 对象的长度都会打印为 0。有人知道为什么吗?

struct NewView: View {
    let model = AudiCar()
    @Observevedobject var values: impData
    
    @State var price = ""
    
    var body: some View {
        Text("calculated price is " + price)
            .onAppear {
                calculatePrice()
            }
    }
    
    func calculatePrice() {
        do {
            ...
           price = String(AudiCarOutput.price)
        }
        catch {
            ...
        }
    }
}

在上面的代码中,StringBuilder对象的长度应该是2(从“i”的长度减去1+1),但是当我在Eclipse中打印StringBuilder的长度时,我得到了0,我把长度改成了17和 100,但我仍然得到 0 作为 String s = "i"; StringBuilder sb = new StringBuilder(s.length()+1); System.out.println(sb.length()); 的长度。

解决方法

您没有在该构造函数中设置其长度。您正在设置它的 capacity 它的长度是 chars 实际上中的数量,而你还没有附加任何

,

那是因为您正在设置 StringBuilder 的最大容量。长度表示构造字符串的实际大小。让我演示一下:

020

输出:

StringBuilder sb = new StringBuilder(5);
System.out.println("Length after initialization with capacity: " + sb.length());
sb.append("abcd");
System.out.println("Length after appending: " + sb.length());
,

根据official documentation for the StringBuilder(int capacity) constructor

构造一个字符串生成器,其中不包含任何字符,初始容量由容量参数指定。

StringBuilder 实例中还没有字符。它只是根据您传入的 int 参数设置用于存储数据的资源的初始容量。