how about renaming init(char) to withDelimiter(char)
The delimiter is different, in that it is the only parameter that must be specified.
But one could still potentially have a withDelimiter() method that could be applied to an existing Builder chain, e.g. to modify an existing format. [The builder delim field is final. I might well change that and add the method.]
Note that the first and last methods in the chain have different input/output classes, so should use a different naming convention.
"CSVFormat.init()" could be replaced by "new CSVFormat.Builder()" but I thought it was slightly neater to have a static "newInstance()" method, and given that the delimiter needs to be defined, I thought it might as well be a parameter to the init() method.
The init() method can of course be renamed.
It cannot be renamed to withDelimiter() unless the existing method of the same name is dropped; but even without the name clash I think it would be a mistake to use a name prefixed "with" as the "newInstance" method as users would expect to be able to provide the parameters in any order.
Just realised that this would also be possible if each withMethod were defined as a static method in CSVFormat as well as a class method in the Builder. [Only the build() method would be unique to the Builder.]
The only extra method call required would then be the build() method.
So the syntax would be
Maybe that would satisfy everyone?