用 StringBuilder 替换字符串?

Replace String with StringBuilder?

我如何添加一个 passStringBuilder() 方法来创建一个与 passString() 功能相同的新方法?我需要它与 StringBuilder 对象而不是 String 对象一起使用。问候。

import intertech.MyDate;
public class PassByExperiment {

    public static void main(String[] args) {

        MyDate date = new MyDate(1, 20, 2008);
        System.out.println("Before passing an object " + date);
        passObject(date);

        System.out.println("After passing an object " + date);
        System.out.println("Before passing a primitive " +
        date.year);

        passPrimitive(date.year);
        System.out.println("After passing a primitive " +
        date.year);

        String x = date.toString();
        System.out.println("Before passing a String " + x);
        passString(x);
        System.out.println("After passing a String " + x); 
    }

    public static void passObject(MyDate d) {
        d.year = 2009;
    }

    public static void passPrimitive(int i) {
        i = 2010;
    }

    public static void passString(String s) 
    {
        int yearSlash = s.lastIndexOf('/');    
        s = s.substring(0, yearSlash + 1);
        s += "2012";

        System.out.println("New date string: " + s);
    }
}

这是我试过的:

public static void passStringBuilder(StringBuilder sb) {
   int yearSlashSB = sb.lastIndexOf('/');
   sb = sb.substring(0, yearSlashSB + 1);
   sb.append("2012");
   System.out.println("New date string: " + sb);
}

StringBuilder 是一个 class,您可以将其作为任何其他对象传递:

public static void passStringBuilder(StringBuilder sb) {
    int yearSlash = sb.lastIndexOf("/");
    sb.delete(yearSlash + 1, sb.length());
    sb,append("2012");
    System.out.println("New date string: " + sb.toString());
}

StringBuilder#substring returns 一个 String 是一个子字符串,sb 保持原样。您需要删除某些字符。

基本上,StringBuilder 保存字符并让您轻松操作它们。稍后,它允许您从中提取 String 。您可以使用 substringtoString.

自 Java 8 起,使用它进行连接没有任何意义,因为 String + String 被 Java 自动更改为 StringBuilder

如果要求不是纯粹的学术性质,我建议

public static void passStringBuilder(StringBuilder sb) {
    passString(sb.toString());
}