2011-05-19 93 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

相關問題