2017-09-01 50 views
1

Java我正在使用String<Html>代碼,這意味着要創建一個完整設計的電子郵件正文。 例如。如何在Java中聲明大字符串(<Html>代碼)以避免「常量字符串太長」錯誤?

String msg= 
      "<html>"+ 
      <BODY CONTENT> 
      "</html>"; 

問題是我得到的錯誤「常量字符串太長」。 我需要一些想法,如果有人對你已經解決了這個問題,或者遇到這一點。

+0

make substrings – Stultuske

+0

@Stultuske你的意思是在Strings.xml裏? –

+0

Strings.xml從哪裏來?我的意思是,不是說String a =「abcdefg ...」;你說String a =「ab」;字符串b =「cd」; ... – Stultuske

回答

1

有不限常量字符串但可以在內存大得多的字符串,只要它是在運行時創建的,如通過資源閱讀它。

你可以試試這個解決方案。

private static String msg = null; 

public static String getMyString() throws IOException { 
    if (null == msg) { 
     try (BufferedReader br = new BufferedReader(new InputStreamReader(MyClass.class.getResourceAsStream("msg.txt")))) { 
      msg = br.lines().collect(Collectors.joining("\n")); 
     } 
    } 
    return msg; 
} 

你可以把它並將其保存在另一個字符串:

String str = getMyString(); 
System.out.println("str = " + str); 

或者你可以建立字符串生成您的字符串。

StringBuilder sb = new StringBuilder(100); 
sb.append("<html>") 
     .append("<body>").append(bodycontent) 
     .append("</body>") 
     .append("</html>"); 
String result = sb.toString(); 

希望這會有幫助。歡呼聲

1

嘗試使用StringBuilder,例如:

StringBuilder msg = new StringBuilder(here_put_size); //change string size, default value is 16 characters 
msg.append("<html>"); 
msg.append("<BODY CONTENT>"); 
msg.append("</html>"); 
return msg.toString(); 
2

沒有這麼多的東西面臨constant string too long錯誤,當我們能做到。

常量被限制爲每個String條目64K個元素,但是您可以將超出常量的幾個小於64K的元素作爲解決方法來拆分。

另一方面,在軟件設計方面,使用完整電子郵件主體作爲Strings的想法並非最終完美。通常開發人員爲此目的使用模板引擎,並將電子郵件正文外部化爲單獨的文件而不是字符串常量。請參閱Chunk模板引擎作爲適合Android應用的示例,但還有很多其他內容,如VelocityFreemarker。模板引擎可以讓你清楚地動態填充件分開靜態電子郵件的內容,從它的HTML表示分開你的應用程序的數據模型,並維護軟件的有效架構

暫時不知道這會阻止您確切原因製作一個文件而不是常量,有很多最佳實踐來解決典型的文件連接問題,從將文件嵌入到jar中作爲資源開始,並最終加密它們以避免不必要的泄露。就這裏問一下另一個問題吧。