如何在java中将对象转换为字符串

时间:2011-05-19 07:50:49

标签: java

我有一个函数将map值(String)作为通用Object返回。如何将其转换回字符串。我试过toString()但我得到的只是end[Ljava.lang.String;@ff2413

public Object getParameterValue(String key)
{
    Iterator iterator=params.entrySet().iterator();

    while(iterator.hasNext())
    {
        Map.Entry me=(Map.Entry)iterator.next();
        String[] arr=(String[])me.getValue();
        log.info(me.getKey().toString()+"="+arr[0]);
    }
    if(params.containsKey(key))
    {
        log.info(key+"="+params.get(key));
        return params.get(key);
    }


    return null;
}

接收结束

String temp=data.getParameterValue("request").toString();
log.info("end"+temp);

log.info(me.getKey().toString()+"="+arr[0]);给我一个输出

email=x@as.com
request=login
projectid=as

11 个答案:

答案 0 :(得分:47)

我担心你的地图中包含String个对象以外的内容。如果在String对象上调用toString(),则会获得字符串本身。

你得到的[Ljava.lang.String表示你可能有一个String数组。

答案 1 :(得分:14)

可能与上述问题无关。但是,如果您正在寻找一种将Java对象序列化为字符串的方法,那么可以随手使用

package pt.iol.security;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.Base64;

public class ObjectUtil {

    static final Base64 base64 = new Base64();

    public static String serializeObjectToString(Object object) throws IOException {
        try (
                ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
                GZIPOutputStream gzipOutputStream = new GZIPOutputStream(arrayOutputStream);
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(gzipOutputStream);) {
            objectOutputStream.writeObject(object);
            objectOutputStream.flush();
            return new String(base64.encode(arrayOutputStream.toByteArray()));
        }
    }

    public static Object deserializeObjectFromString(String objectString) throws IOException, ClassNotFoundException {
        try (
                ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(base64.decode(objectString));
                GZIPInputStream gzipInputStream = new GZIPInputStream(arrayInputStream);
                ObjectInputStream objectInputStream = new ObjectInputStream(gzipInputStream)) {
            return objectInputStream.readObject();
        }
    }
}

答案 2 :(得分:4)

查看输出,看来你的“temp”是一个String数组。您需要遍历数组以显示每个值。

答案 3 :(得分:4)

结果不是String而是String[]。这就是为什么你得到这个意想不到的打印输出。

[Ljava.lang.StringString数组的签名

System.out.println(new String[]{});

答案 4 :(得分:4)

也许您可以将其转换为JSON字符串

table

在我的情况下,我想在响应标题中添加一个对象,但是你不能在标题中添加对象,

所以为了解决这个问题,我将我的对象转换为JSON字符串,在客户端,我将该字符串再次返回给JSON

答案 5 :(得分:3)

解决方案1:施放

String temp=(String)data.getParameterValue("request");

解决方案2:使用键入的地图:

Map<String, String> param;

所以你改变改变你的函数的返回类型

public String getParameterValue(String key)
{
    if(params.containsKey(key))
    {
        return params.get(key);
    }
    return null;
}

然后不需要强制转换或toString

String temp=data.getParameterValue("request");

答案 6 :(得分:3)

问题如何将对象转换为String ,尽管您在此处看到了几个答案,并且尽管存在Object.toString方法,但是无法回答,或者有无数的答案。因为要求的是某种文本表示或对象的描述,并且存在无限多种可能的表示。每个表示使用特殊目的语言(可能是一种非常有限的语言)或足以表达所有可能对象实例的表达格式对特定对象实例进行编码。

在编写代码以将对象转换为String之前,您必须决定要使用的语言/格式。

答案 7 :(得分:2)

将serialize对象转换为String并将String转换为Object

stringToBean(beanToString(new LoginMdp()), LoginMdp.class);

public static String beanToString(Object object) throws IOException {

    ObjectMapper objectMapper = new ObjectMapper();
    StringWriter stringEmp = new StringWriter();
    objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
    objectMapper.writeValue(stringEmp, object);
    return stringEmp.toString();
}

public static <T> T stringToBean(String content, Class<T> valueType) throws IOException {
    return new ObjectMapper().readValue(content, valueType);
}

答案 8 :(得分:0)

toString()是一个调试信息字符串。默认实现返回类名和系统标识哈希。集合返回所有元素,但不返回数组。

另请注意NullPointerException创建日志!

在这种情况下,Arrays.toString()可能有所帮助:

Object temp = data.getParameterValue("request");
String log = temp == null ? "null" : (temp.getClass().isArray() ? Arrays.toString((Object[])temp) : temp.toString());
log.info("end " + temp);

您还可以使用Arrays.asList()

Object temp = data.getParameterValue("request");
Object log = temp == null ? null : (temp.getClass().isArray() ? Arrays.asList((Object[])temp) : temp);
log.info("end " + temp);

这可能会导致原始数组ClassCastExceptionint[],...)。

答案 9 :(得分:0)

/**  * This toString-Method works for every Class, where you want to display all the fields and its values  */ public String toString() {

StringBuffer sb = new StringBuffer();

Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones

for (Field field : fields){

    try {

        field.setAccessible(true);
        String key=field.getName();
        String value;

        try{
            value = (String) field.get(this);
        } catch (ClassCastException e){
            value="";
        }

        sb.append(key).append(": ").append(value).append("\n");

    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

}

return sb.toString(); }

答案 10 :(得分:0)

您可以创建toString()方法将对象转换为字符串。

int bid;
String bname;
double bprice;

Book(String str)
{
    String[] s1 = str.split("-");
    bid = Integer.parseInt(s1[0]);
    bname = s1[1];
    bprice = Double.parseDouble(s1[2]);
}

public String toString()
{
    return bid+"-"+bname+"-"+bprice;
}   

public static void main(String[] s)
{
    Book b1 = new Book("12-JAVA-200.50");
    System.out.println(b1);
}