As mentioned in Section 9.10, if you just use
readLine( )
and println( )
, you
won’t have to think about the line endings. But a particular
problem, especially for recycled C programmers and their relatives,
is using the
character in text strings to mean
a newline. What is particularly distressing about this code is that
it will work -- sometimes -- usually on the developer’s
own platform. But it will surely someday fail, on some other system.
// BadNewline.java String myName; public static void main(String argv[]) { BadNewline jack = new BadNewline("Jack Adolphus Schmidt, III"); System.out.println(jack); } /** * DON'T DO THIS. THIS IS BAD CODE. */ public String toString( ) { return "BadNewlineDemo@" + hashCode( ) + " " + myName; } // The obvious Constructor is not shown for brevity; it's in the code
The real problem is not that it will fail on some platforms, though.
What’s really wrong is that it mixes formatting and
input/output, or tries to. Don’t mix line-based display with
toString( )
: avoid “multiline strings”
output from toString( )
or any other
string-returning method. If you need to write
multiple
strings, then say what you mean:
// GoodNewline.java String myName; public static void main(String argv[]) { GoodNewline jack = new GoodNewline("Jack Adolphus Schmidt, III"); jack.print(System.out); } protected void print(PrintStream out) { out.println(toString( )); // classname and hashcode out.println(myName); // print name on next line }
3.147.59.198