Java/Class/toString
Содержание
- 1 Array To String
- 2 Constructs pretty string representation of object value
- 3 Demonstrate toString() without an override
- 4 Gets the toString of an Object returning an empty string ("") if null input.
- 5 Gets the toString that would be produced by Object if a class did not override toString itself.
- 6 Null Safe To String
- 7 Reflection based toString() utilities
- 8 ShowToString -- demo program to show default toString methods
- 9 To String Demo
- 10 ToString -- demo program to show a toString method
- 11 toString(Object[] array)
- 12 Use a generic toString()
Array To String
<source lang="java">
/**
* Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
import java.io.PrintWriter; import java.io.StringWriter; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; import java.text.DateFormat; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import java.util.Collection;
/**
* General string utils */
public class StringUtils {
final public static char COMMA = ","; final public static String COMMA_STR = ","; final public static char ESCAPE_CHAR = "\\"; private static DecimalFormat oneDecimal = new DecimalFormat("0.0"); /** * Given an array of strings, return a comma-separated list of its elements. * @param strs Array of strings * @return Empty string if strs.length is 0, comma separated list of strings * otherwise */ public static String arrayToString(String[] strs) { if (strs.length == 0) { return ""; } StringBuffer sbuf = new StringBuffer(); sbuf.append(strs[0]); for (int idx = 1; idx < strs.length; idx++) { sbuf.append(","); sbuf.append(strs[idx]); } return sbuf.toString(); }
}
</source>
Constructs pretty string representation of object value
<source lang="java">
// Copyright (c) 2003-2009, Jodd Team (jodd.org). All Rights Reserved.
import java.lang.reflect.Array; import java.util.Collection; import java.util.Iterator; import java.util.Map; /**
* Constructs pretty string representation of object value. */
public class PrettyStringBuilder {
protected int maxArrayLen = 10; protected int maxDeep = 3; protected int deep; protected String nullValue = "<null>"; public PrettyStringBuilder() { } public int getMaxArrayLen() { return maxArrayLen; } public void setMaxArrayLen(int maxArrayLen) { this.maxArrayLen = maxArrayLen; } public int getMaxDeep() { return maxDeep; } public void setMaxDeep(int maxDeep) { this.maxDeep = maxDeep; } public String getNullValue() { return nullValue; } public void setNullValue(String nullValue) { this.nullValue = nullValue; } /** * Returns pretty value from object value. */ protected String toPrettyString(Object obj) { deep++; if (obj == null) { deep--; return nullValue; } if (deep == maxDeep) { deep--; return obj.toString(); } StringBuilder s = new StringBuilder(); Class c = obj.getClass(); if (c.isArray()) { int arrayLen = Array.getLength(obj); int len = Math.min(arrayLen, maxArrayLen); s.append("["); for (int i = 0; i < len; i++) { s.append(toPrettyString(Array.get(obj, i))); if (i != len - 1) { s.append(","); } } if (len < arrayLen) { s.append("..."); } s.append("]"); } else if (obj instanceof Collection) { Collection coll = (Collection) obj; Iterator it = coll.iterator(); int i = 0; s.append("("); while ((it.hasNext() && (i < maxArrayLen))) { s.append(toPrettyString(it.next())); i++; } if (i < coll.size()) { s.append("..."); } s.append(")"); } else if (obj instanceof Map) { Map map = (Map) obj; Iterator it = map.keySet().iterator(); int i = 0; s.append("{"); while ((it.hasNext() && (i < maxArrayLen))) { Object key = it.next(); s.append(key).append(":"); s.append(toPrettyString(map.get(key))); i++; } if (i < map.size()) { s.append("..."); } s.append("}"); } else { s.append(obj.toString()); } deep--; return s.toString(); } /** * Returns pretty string representation of the object. */ public String toString(Object value) { return toPrettyString(value); }
}
</source>
Demonstrate toString() without an override
<source lang="java">
/*
* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002. * All rights reserved. Software written by Ian F. Darwin and others. * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS"" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee * cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s, * pioneering role in inventing and promulgating (and standardizing) the Java * language and environment is gratefully acknowledged. * * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for * inventing predecessor languages C and C++ is also gratefully acknowledged. */
/* Demonstrate toString() without an override */ public class ToStringWithout {
int x, y; /** Simple constructor */ public ToStringWithout(int anX, int aY) { x = anX; y = aY; } /** Main just creates and prints an object */ public static void main(String[] args) { System.out.println(new ToStringWithout(42, 86)); }
}
</source>
Gets the toString of an Object returning an empty string ("") if null input.
<source lang="java">
/*
* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
import java.io.Serializable; /**
*Operations on Object
.
**
This class tries to handle null
input gracefully.
* An exception will generally not be thrown for a null
input.
* Each method documents its behaviour in more detail.
* * @author * @since 1.0 * @version $Id: ObjectUtils.java 594336 2007-11-12 22:54:02Z bayard $ */
public class ObjectUtils {
/***
Singleton used as a null
placeholder where
* null
has another meaning.
**
For example, in a HashMap
the
* {@link java.util.HashMap#get(java.lang.Object)} method returns
* null
if the Map
contains
* null
or if there is no matching key. The
* Null
placeholder can be used to distinguish between
* these two cases.
**
Another example is Hashtable
, where null
* cannot be stored.
**
This instance is Serializable.
*/ public static final Null NULL = new Null(); /***
ObjectUtils
instances should NOT be constructed in
* standard programming. Instead, the class should be used as
* ObjectUtils.defaultIfNull("a","b");
.
**
This constructor is public to permit tools that require a JavaBean instance * to operate.
*/ public ObjectUtils() { super(); } // Defaulting //----------------------------------------------------------------------- /***
Returns a default value if the object passed is
* null
.
**
* ObjectUtils.defaultIfNull(null, null) = null * ObjectUtils.defaultIfNull(null, "") = "" * ObjectUtils.defaultIfNull(null, "zz") = "zz" * ObjectUtils.defaultIfNull("abc", *) = "abc" * ObjectUtils.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE *
* * @param object the*Object
to test, may benull
* @param defaultValue the default value to return, may benull
* @returnobject
if it is notnull
, defaultValue otherwise */ public static Object defaultIfNull(Object object, Object defaultValue) { return object != null ? object : defaultValue; } /**
Compares two objects for equality, where either one or both
* objects may be null
.
**
* ObjectUtils.equals(null, null) = true * ObjectUtils.equals(null, "") = false * ObjectUtils.equals("", null) = false * ObjectUtils.equals("", "") = true * ObjectUtils.equals(Boolean.TRUE, null) = false * ObjectUtils.equals(Boolean.TRUE, "true") = false * ObjectUtils.equals(Boolean.TRUE, Boolean.TRUE) = true * ObjectUtils.equals(Boolean.TRUE, Boolean.FALSE) = false *
* * @param object1 the first object, may be*null
* @param object2 the second object, may benull
* @returntrue
if the values of both objects are the same */ public static boolean equals(Object object1, Object object2) { if (object1 == object2) { return true; } if ((object1 == null) || (object2 == null)) { return false; } return object1.equals(object2); } /**
Gets the hash code of an object returning zero when the
* object is null
.
**
* ObjectUtils.hashCode(null) = 0 * ObjectUtils.hashCode(obj) = obj.hashCode() *
*
* @param obj the object to obtain the hash code of, may be null
* @return the hash code of the object, or zero if null
* @since 2.1
*/
public static int hashCode(Object obj) {
return (obj == null) ? 0 : obj.hashCode();
}
// Identity ToString
//-----------------------------------------------------------------------
/**
* Gets the toString that would be produced by Object
* if a class did not override toString itself. null
* will return null
.
**
* ObjectUtils.identityToString(null) = null * ObjectUtils.identityToString("") = "java.lang.String@1e23" * ObjectUtils.identityToString(Boolean.TRUE) = "java.lang.Boolean@7fa" *
* * @param object the object to create a toString for, may be **null
* @return the default toString text, ornull
if *null
passed in */ public static String identityToString(Object object) { if (object == null) { return null; } StringBuffer buffer = new StringBuffer(); identityToString(buffer, object); return buffer.toString(); } /**
Appends the toString that would be produced by Object
* if a class did not override toString itself. null
* will throw a NullPointerException for either of the two parameters.
**
* ObjectUtils.identityToString(buf, "") = buf.append("java.lang.String@1e23" * ObjectUtils.identityToString(buf, Boolean.TRUE) = buf.append("java.lang.Boolean@7fa" * ObjectUtils.identityToString(buf, Boolean.TRUE) = buf.append("java.lang.Boolean@7fa") *
* * @param buffer the buffer to append to * @param object the object to create a toString for * @since 2.4 */ public static void identityToString(StringBuffer buffer, Object object) { if (object == null) { throw new NullPointerException("Cannot get the toString of a null identity"); } buffer.append(object.getClass().getName()) .append("@") .append(Integer.toHexString(System.identityHashCode(object))); }
// ToString //----------------------------------------------------------------------- /***
Gets the toString
of an Object
returning
* an empty string ("") if null
input.
**
* ObjectUtils.toString(null) = "" * ObjectUtils.toString("") = "" * ObjectUtils.toString("bat") = "bat" * ObjectUtils.toString(Boolean.TRUE) = "true" *
* * @see StringUtils#defaultString(String) * @see String#valueOf(Object) * @param obj the Object to*toString
, may be null * @return the passed in Object"s toString, or nullStr ifnull
input * @since 2.0 */ public static String toString(Object obj) { return obj == null ? "" : obj.toString(); } /**
Gets the toString
of an Object
returning
* a specified text if null
input.
**
* ObjectUtils.toString(null, null) = null * ObjectUtils.toString(null, "null") = "null" * ObjectUtils.toString("", "null") = "" * ObjectUtils.toString("bat", "null") = "bat" * ObjectUtils.toString(Boolean.TRUE, "null") = "true" *
* * @see StringUtils#defaultString(String,String) * @see String#valueOf(Object) * @param obj the Object totoString
, may be null * @param nullStr the String to return ifnull
input, may be null * @return the passed in Object"s toString, or nullStr ifnull
input * @since 2.0 */ public static String toString(Object obj, String nullStr) { return obj == null ? nullStr : obj.toString(); }
// Null //----------------------------------------------------------------------- /***
Class used as a null placeholder where null
* has another meaning.
**
For example, in a HashMap
the
* {@link java.util.HashMap#get(java.lang.Object)} method returns
* null
if the Map
contains
* null
or if there is no matching key. The
* Null
placeholder can be used to distinguish between
* these two cases.
**
Another example is Hashtable
, where null
* cannot be stored.
*/ public static class Null implements Serializable { /** * Required for serialization support. Declare serialization compatibility with Commons Lang 1.0 * * @see java.io.Serializable */ private static final long serialVersionUID = 7092611880189329093L; /** * Restricted constructor - singleton. */ Null() { super(); } /***
Ensure singleton.
* * @return the singleton value */ private Object readResolve() { return ObjectUtils.NULL; } }
}
</source>
Gets the toString that would be produced by Object if a class did not override toString itself.
<source lang="java">
/*
* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
import java.io.Serializable; /**
*Operations on Object
.
**
This class tries to handle null
input gracefully.
* An exception will generally not be thrown for a null
input.
* Each method documents its behaviour in more detail.
* * @author * @since 1.0 * @version $Id: ObjectUtils.java 594336 2007-11-12 22:54:02Z bayard $ */
public class ObjectUtils {
/***
Singleton used as a null
placeholder where
* null
has another meaning.
**
For example, in a HashMap
the
* {@link java.util.HashMap#get(java.lang.Object)} method returns
* null
if the Map
contains
* null
or if there is no matching key. The
* Null
placeholder can be used to distinguish between
* these two cases.
**
Another example is Hashtable
, where null
* cannot be stored.
**
This instance is Serializable.
*/ public static final Null NULL = new Null(); /***
ObjectUtils
instances should NOT be constructed in
* standard programming. Instead, the class should be used as
* ObjectUtils.defaultIfNull("a","b");
.
**
This constructor is public to permit tools that require a JavaBean instance * to operate.
*/ public ObjectUtils() { super(); } // Defaulting //----------------------------------------------------------------------- /***
Returns a default value if the object passed is
* null
.
**
* ObjectUtils.defaultIfNull(null, null) = null * ObjectUtils.defaultIfNull(null, "") = "" * ObjectUtils.defaultIfNull(null, "zz") = "zz" * ObjectUtils.defaultIfNull("abc", *) = "abc" * ObjectUtils.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE *
* * @param object the*Object
to test, may benull
* @param defaultValue the default value to return, may benull
* @returnobject
if it is notnull
, defaultValue otherwise */ public static Object defaultIfNull(Object object, Object defaultValue) { return object != null ? object : defaultValue; } /**
Compares two objects for equality, where either one or both
* objects may be null
.
**
* ObjectUtils.equals(null, null) = true * ObjectUtils.equals(null, "") = false * ObjectUtils.equals("", null) = false * ObjectUtils.equals("", "") = true * ObjectUtils.equals(Boolean.TRUE, null) = false * ObjectUtils.equals(Boolean.TRUE, "true") = false * ObjectUtils.equals(Boolean.TRUE, Boolean.TRUE) = true * ObjectUtils.equals(Boolean.TRUE, Boolean.FALSE) = false *
* * @param object1 the first object, may be*null
* @param object2 the second object, may benull
* @returntrue
if the values of both objects are the same */ public static boolean equals(Object object1, Object object2) { if (object1 == object2) { return true; } if ((object1 == null) || (object2 == null)) { return false; } return object1.equals(object2); } /**
Gets the hash code of an object returning zero when the
* object is null
.
**
* ObjectUtils.hashCode(null) = 0 * ObjectUtils.hashCode(obj) = obj.hashCode() *
*
* @param obj the object to obtain the hash code of, may be null
* @return the hash code of the object, or zero if null
* @since 2.1
*/
public static int hashCode(Object obj) {
return (obj == null) ? 0 : obj.hashCode();
}
// Identity ToString
//-----------------------------------------------------------------------
/**
* Gets the toString that would be produced by Object
* if a class did not override toString itself. null
* will return null
.
**
* ObjectUtils.identityToString(null) = null * ObjectUtils.identityToString("") = "java.lang.String@1e23" * ObjectUtils.identityToString(Boolean.TRUE) = "java.lang.Boolean@7fa" *
* * @param object the object to create a toString for, may be **null
* @return the default toString text, ornull
if *null
passed in */ public static String identityToString(Object object) { if (object == null) { return null; } StringBuffer buffer = new StringBuffer(); identityToString(buffer, object); return buffer.toString(); } /**
Appends the toString that would be produced by Object
* if a class did not override toString itself. null
* will throw a NullPointerException for either of the two parameters.
**
* ObjectUtils.identityToString(buf, "") = buf.append("java.lang.String@1e23" * ObjectUtils.identityToString(buf, Boolean.TRUE) = buf.append("java.lang.Boolean@7fa" * ObjectUtils.identityToString(buf, Boolean.TRUE) = buf.append("java.lang.Boolean@7fa") *
* * @param buffer the buffer to append to * @param object the object to create a toString for * @since 2.4 */ public static void identityToString(StringBuffer buffer, Object object) { if (object == null) { throw new NullPointerException("Cannot get the toString of a null identity"); } buffer.append(object.getClass().getName()) .append("@") .append(Integer.toHexString(System.identityHashCode(object))); }
// ToString //----------------------------------------------------------------------- /***
Gets the toString
of an Object
returning
* an empty string ("") if null
input.
**
* ObjectUtils.toString(null) = "" * ObjectUtils.toString("") = "" * ObjectUtils.toString("bat") = "bat" * ObjectUtils.toString(Boolean.TRUE) = "true" *
* * @see StringUtils#defaultString(String) * @see String#valueOf(Object) * @param obj the Object to*toString
, may be null * @return the passed in Object"s toString, or nullStr ifnull
input * @since 2.0 */ public static String toString(Object obj) { return obj == null ? "" : obj.toString(); } /**
Gets the toString
of an Object
returning
* a specified text if null
input.
**
* ObjectUtils.toString(null, null) = null * ObjectUtils.toString(null, "null") = "null" * ObjectUtils.toString("", "null") = "" * ObjectUtils.toString("bat", "null") = "bat" * ObjectUtils.toString(Boolean.TRUE, "null") = "true" *
* * @see StringUtils#defaultString(String,String) * @see String#valueOf(Object) * @param obj the Object totoString
, may be null * @param nullStr the String to return ifnull
input, may be null * @return the passed in Object"s toString, or nullStr ifnull
input * @since 2.0 */ public static String toString(Object obj, String nullStr) { return obj == null ? nullStr : obj.toString(); }
// Null //----------------------------------------------------------------------- /***
Class used as a null placeholder where null
* has another meaning.
**
For example, in a HashMap
the
* {@link java.util.HashMap#get(java.lang.Object)} method returns
* null
if the Map
contains
* null
or if there is no matching key. The
* Null
placeholder can be used to distinguish between
* these two cases.
**
Another example is Hashtable
, where null
* cannot be stored.
*/ public static class Null implements Serializable { /** * Required for serialization support. Declare serialization compatibility with Commons Lang 1.0 * * @see java.io.Serializable */ private static final long serialVersionUID = 7092611880189329093L; /** * Restricted constructor - singleton. */ Null() { super(); } /***
Ensure singleton.
* * @return the singleton value */ private Object readResolve() { return ObjectUtils.NULL; } }
}
</source>
Null Safe To String
<source lang="java">
import java.lang.reflect.Array; import java.util.Arrays; /*
* Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
//Revised from springframework /**
* Miscellaneous object utility methods. Mainly for internal use within the * framework; consider Jakarta"s Commons Lang for a more comprehensive suite * of object utilities. * * @author Juergen Hoeller * @author Keith Donald * @author Rod Johnson * @author Rob Harrop * @author Alex Ruiz * @since 19.03.2004 * @see org.apache.rumons.lang.ObjectUtils */
abstract class ObjectUtils {
private static final int INITIAL_HASH = 7; private static final int MULTIPLIER = 31; private static final String EMPTY_STRING = ""; private static final String NULL_STRING = "null"; private static final String ARRAY_START = "{"; private static final String ARRAY_END = "}"; private static final String EMPTY_ARRAY = ARRAY_START + ARRAY_END; private static final String ARRAY_ELEMENT_SEPARATOR = ", ";
/** * Return a content-based String representation if*obj
is * notnull
; otherwise returns an empty String.
Differs from {@link #nullSafeToString(Object)} in that it returns
* an empty String rather than "null" for a null
value.
* @param obj the object to build a display String for
* @return a display String representation of obj
* @see #nullSafeToString(Object)
*/
public static String getDisplayString(Object obj) {
if (obj == null) {
return EMPTY_STRING;
}
return nullSafeToString(obj);
}
/**
* Determine the class name for the given object.
* <p>Returns "null"
if obj
is null
.
* @param obj the object to introspect (may be null
)
* @return the corresponding class name
*/
public static String nullSafeClassName(Object obj) {
return (obj != null ? obj.getClass().getName() : NULL_STRING);
}
/**
* Return a String representation of the specified Object.
* <p>Builds a String representation of the contents in case of an array.
* Returns "null"
if obj
is null
.
* @param obj the object to build a String representation for
* @return a String representation of obj
*/
public static String nullSafeToString(Object obj) {
if (obj == null) {
return NULL_STRING;
}
if (obj instanceof String) {
return (String) obj;
}
if (obj instanceof Object[]) {
return nullSafeToString((Object[]) obj);
}
if (obj instanceof boolean[]) {
return nullSafeToString((boolean[]) obj);
}
if (obj instanceof byte[]) {
return nullSafeToString((byte[]) obj);
}
if (obj instanceof char[]) {
return nullSafeToString((char[]) obj);
}
if (obj instanceof double[]) {
return nullSafeToString((double[]) obj);
}
if (obj instanceof float[]) {
return nullSafeToString((float[]) obj);
}
if (obj instanceof int[]) {
return nullSafeToString((int[]) obj);
}
if (obj instanceof long[]) {
return nullSafeToString((long[]) obj);
}
if (obj instanceof short[]) {
return nullSafeToString((short[]) obj);
}
String str = obj.toString();
return (str != null ? str : EMPTY_STRING);
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(Object[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(String.valueOf(array[i]));
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(boolean[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(byte[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(char[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(""").append(array[i]).append(""");
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(double[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(float[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(int[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(long[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
/**
* Return a String representation of the contents of the specified array.
* <p>The String representation consists of a list of the array"s elements,
* enclosed in curly braces ("{}"
). Adjacent elements are separated
* by the characters ", "
(a comma followed by a space). Returns
* "null"
if array
is null
.
* @param array the array to build a String representation for
* @return a String representation of array
*/
public static String nullSafeToString(short[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < length; i++) {
if (i == 0) {
buffer.append(ARRAY_START);
}
else {
buffer.append(ARRAY_ELEMENT_SEPARATOR);
}
buffer.append(array[i]);
}
buffer.append(ARRAY_END);
return buffer.toString();
}
}
</source>
Reflection based toString() utilities
<source lang="java">
import java.lang.reflect.Field; public class Main {
String hello = "world"; int i = 42; public static void main(String args[]) { System.out.println(Util.toString(new MyClass())); System.out.println(Util.toString(new MyAnotherClass())); }
} class Util {
public static String toString(Object o) { StringBuilder sb = new StringBuilder(); toString(o, o.getClass(), sb); return o.getClass().getName()+ "\n"+sb.toString(); } private static void toString(Object o, Class clazz, StringBuilder sb) { Field f[] = clazz.getDeclaredFields(); for (int i = 0; i < f.length; i++) { f[i].setAccessible(true); try { sb.append(f[i].getName() + "=" + f[i].get(o)+"\n"); } catch (Exception e) { e.printStackTrace(); } } if (clazz.getSuperclass() != null) toString(o, clazz.getSuperclass(), sb); }
} class MyClass {
int i = 1; private double d = 3.14;
} class MyAnotherClass extends MyClass{
int f = 9;
}
</source>
ShowToString -- demo program to show default toString methods
<source lang="java">
/*
* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002. * All rights reserved. Software written by Ian F. Darwin and others. * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS"" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee * cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s, * pioneering role in inventing and promulgating (and standardizing) the Java * language and environment is gratefully acknowledged. * * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for * inventing predecessor languages C and C++ is also gratefully acknowledged. */
import java.util.*; import java.awt.Button; /**
* ShowToString -- demo program to show default toString methods. * Some classes provide a toString() method, while others inherit * the default toString() from Object. In all cases, you can print * an object by calling its toString(), which is very useful in debugging! */
public class ShowToString {
/** main method */ public static void main(String[] argv) { System.out.println("An Object\t" + new Object()); System.out.println("A Date \t" + new Date()); System.out.println("A GregorianCalendar\t" + new GregorianCalendar()); System.out.println("An Exception\t" + new Exception("Hi!")); Button b = new Button("Push ME!"); // An AWT pushbutton b.setBounds(40, 50, 120, 60); // explained in the AWT chapter! System.out.println("A Button\t" + b); System.out.println("A ShowToString object!\t" + new ShowToString()); }
}
</source>
To String Demo
<source lang="java">
/* From http://java.sun.ru/docs/books/tutorial/index.html */ /*
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * -Redistribution of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * -Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or intended * for use in the design, construction, operation or maintenance of any * nuclear facility. */
public class ToStringDemo {
public static void main(String[] args) { double d = 858.48; String s = Double.toString(d); int dot = s.indexOf("."); System.out.println(s.substring(0, dot).length() + " digits before decimal point."); System.out.println(s.substring(dot + 1).length() + " digits after decimal point."); }
}
</source>
ToString -- demo program to show a toString method
<source lang="java">
/*
* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002. * All rights reserved. Software written by Ian F. Darwin and others. * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS"" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee * cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s, * pioneering role in inventing and promulgating (and standardizing) the Java * language and environment is gratefully acknowledged. * * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for * inventing predecessor languages C and C++ is also gratefully acknowledged. */
/**
* ToString -- demo program to show a toString method. */
public class ToString {
int value; ToString() { value = 0; } ToString(int it) { value = it; } public String toString() { return "-->" + value + "<--"; } public static void main(String[] argv) { ToString s = new ToString(123); System.out.println("Hello, World of Java"); System.out.println("My object is" + s); }
}
</source>
toString(Object[] array)
<source lang="java">
/* ------------------------------------------------------------------------
* $Id: ToString.java,v 1.1 2005/07/23 12:56:13 tpv Exp $ * Copyright 2005 Tim Vernum * ------------------------------------------------------------------------ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ------------------------------------------------------------------------ */
/**
* @version $Revision: 1.1 $ */
public final class ToString {
public static String toString(Object[] array) { StringBuffer buffer = new StringBuffer(); Class type = array.getClass().getComponentType(); if (type != Object.class) { buffer.append(type.getName()); } if (array.length == 0) { buffer.append("[0]"); } else { buffer.append("["); buffer.append(array.length); buffer.append("]{"); for (int i = 0; i < array.length; i++) { buffer.append(array[i]); buffer.append(","); } buffer.setCharAt(buffer.length() - 1, "}"); } return buffer.toString(); } private ToString() { // Utility class }
}
</source>
Use a generic toString()
<source lang="java">
import java.lang.reflect.Field; public class Main {
public static void main(String args[]) { System.out.println(new MyClass().toString()); }
} class MyClass {
String hello = "hi"; int i = 0; public String toString() { StringBuilder sb = new StringBuilder(); Class cls = getClass(); Field[] f = cls.getDeclaredFields(); for (int i = 0; i < f.length; i++) { f[i].setAccessible(true); try { sb.append(f[i].getName()+"="+ f[i].get(this)+"\n"); } catch (Exception e) { e.printStackTrace(); } } if (cls.getSuperclass().getSuperclass() != null) { sb.append("super:"+ super.toString()+"\n"); } return cls.getName()+"\n" + sb.toString(); }
}
</source>