'Limiting # of characters per line

I'm a beginner and I'm having trouble trying to display the output so that if its too big it will move it to the next line.

This is what I have so far:

import java.util.Scanner;

public class numberBracket {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("howMany: ");
        int howMany = scanner.nextInt();
    
        
        System.out.println("lineLength: ");
        int lineLength = scanner.nextInt();
        scanner.nextLine();
        
        printNumbers(howMany, lineLength);
         
    }
        
    public static void printNumbers(int howMany, int lineLength) {
        Integer charLength =  Integer.valueOf(lineLength); 
        
        for(int i = 1; i <= howMany; i ++) {
            
            String t = "[" + i + "]";
            
            
            while(t.length() > charLength ) {
                int index = t.lastIndexOf(' ', charLength);
                System.out.print(t.substring(0, index));
                t = t.substring(index + 1);
            }
            System.out.print(t);
        }
}
}

So if they enter 10 for the lineLength it would be

[1][2][3]

[4]

and if they entered 12 it would be

[1][2][3][4]


Solution 1:[1]

You can use this snippet:

    public static void printNumbers(int howMany, int lineLength) {
        StringBuilder sb = new StringBuilder();
        int length = 0;

        for (int i = 1; i <= howMany; i++) {
            String t = "[" + i + "]";

            if (length + t.length() > lineLength) {
                sb.append("\n");
                length = 0;
            }
            
            length += t.length();

            sb.append(t);
        }
        
        System.out.println(sb.toString());
    }

Solution 2:[2]

public static void printNumbers(int howMany, int lineLength) {
    String printed = "";

    for (int i = 1; i <= howMany; i++) {
        String t = "[" + i + "]";
        if ((printed.length() + t.length()) > lineLength) {
            printed = "";
            System.out.println();
        }
        printed += t;
        System.out.print(t);
    }
}

Solution 3:[3]

I believe you have to check if it has room in the current line before printing.

If it does have room print it, if it doesn't, print in a new line.

public static void printNumbers(int howMany, int lineLength) {
    int alreadyPrintedLength = 0;
    for(int i = 1; i <= howMany; i ++) {
      String t = "[" + i + "]";
      int actualCharLength = t.length();
      boolean hasRoomInCurrentLine = (alreadyPrintedLength + actualCharLength) <= lineLength;
      if (hasRoomInCurrentLine) {
        System.out.print(t);
        alreadyPrintedLength += actualCharLength;
      } else {
        System.out.print(System.lineSeparator() + t);
        alreadyPrintedLength = actualCharLength;
      }
    }
  }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Ralf Renz
Solution 3