2011-05-19 55 views
28

我有一个返回地图值(String)作为通用对象的函数。我如何将它转换回字符串。我试过的toString(),但我得到的是end[Ljava.lang.String;@ff2413如何将对象转换为java中的字符串

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 protected] 
request=login 
projectid=as 
+0

我从你的问题中删除了你的解决方案。如果您想将其发布为*答案*,请随时取消。 – 2015-03-18 09:27:00

回答

46

恐怕你的地图包含除String以外的东西对象。如果您在字符串对象上调用toString(),则会获得字符串本身。

你得到了什么[Ljava.lang.String表示你可能有一个字符串数组。

+3

+1:faster'n me :-) – cadrian 2011-05-19 07:56:56

+2

只需20秒即可打败我........ +1 – 2011-05-19 07:57:48

+0

我编辑了我的问题部分,以显示当我遍历我的地图时得到的内容 – abi1964 2011-05-19 08:00:13

4

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

4

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

[Ljava.lang.StringString数组的签名

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

谢谢Andreas_D – abi1964 2011-05-19 08:08:49

3

解决方案1:投

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

解决方案2:使用类型地图:

Map<String, String> param; 

所以你更改更改y的返回类型我们的功能

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

,然后无需转换或的toString

+0

铸造不能一直工作,例如'Int'和'长... – WoLfPwNeR 2016-02-25 20:02:40

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); 

这可能导致ClassCastException的基本数组(int[],...)。

11

可能与上述问题没有太大关系。但是,如果你正在寻找一种方式来序列化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(); 
     } 
    } 
} 
+0

这是一段令人惊叹的代码,它完美地解决了我的问题。万分感谢。 – 2014-04-19 00:17:28

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(); } 
2

我怎么一个对象转换为String,虽然你看到几个答案的问题在这里,尽管存在Object.toString方法,但无法回答,或者有无数的答案。因为所要求的是对象的某种文本表示或描述,并且存在无限多的可能的表示。每种表示都使用特殊目的语言(可能是非常有限的语言)或格式编码特定的对象实例,该格式足以表达所有可能的对象实例。

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

1

序列化对象转换为字符串和字符串对象

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); 
} 
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); 
} 
0

也许你从我的情况下将其转换为JSON字符串

String jsonString = new com.google.gson.Gson().toJson(myObject); 

中获益,我想一个对象添加到响应头,但你不能对象添加到标题,

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