Search code examples
javastringstringbuilder

Replace String with StringBuilder?


How i can add a passStringBuilder() method creating a new method that does the same work as passString() does? I need this works with a StringBuilder object rather than a String object. Regards.

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

This is what i tried:

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

Solution

  • StringBuilder is a class which you can pass as any other Object:

    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 a String which is a substring, leaving sb as it was. You need to delete certain characters.

    Basically, StringBuilder holds characters and lets you easily manipulate them. Later, it allows you to extract String from it. You can use substring or toString.

    Since Java 8, it makes no sense to use it for concatenation as String + String is automatically changed to StringBuilder by Java.