Format a message using MessageFormat.format() in Java

前端 未结 6 501
没有蜡笔的小新
没有蜡笔的小新 2020-12-04 18:58

I have stored some messages in a resource bundle. I\'m trying to format these messages as follows.

import java.text.MessageFormat;

String text = MessageForm         


        
相关标签:
6条回答
  • 2020-12-04 19:13

    For everyone that has Android problems in the string.xml, use \'\' instead of single quote.

    0 讨论(0)
  • 2020-12-04 19:15

    Add an extra apostrophe ' to the MessageFormat pattern String to ensure the ' character is displayed

    String text = 
         java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
                                             ^
    

    An apostrophe (aka single quote) in a MessageFormat pattern starts a quoted string and is not interpreted on its own. From the javadoc

    A single quote itself must be represented by doubled single quotes '' throughout a String.

    The String You\\'re is equivalent to adding a backslash character to the String so the only difference will be that You\re will be produced rather than Youre. (before double quote solution '' applied)

    0 讨论(0)
  • 2020-12-04 19:17

    Using an apostrophe (Unicode: \u2019) instead of a single quote ' fixed the issue without doubling the \'.

    0 讨论(0)
  • 2020-12-04 19:24

    You need to use double apostrophe instead of single in the "You''re", eg:

    String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
    System.out.println(text);
    
    0 讨论(0)
  • 2020-12-04 19:25

    Here is a method that does not require editing the code and works regardless of the number of characters.

    String text = 
      java.text.MessageFormat.format(
        "You're about to delete {0} rows.".replaceAll("'", "''"), 5);
    
    0 讨论(0)
  • 2020-12-04 19:38

    Just be sure you have used double apostrophe ('')

    String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5);
    System.out.println(text);
    

    Edit:

    Within a String, a pair of single quotes can be used to quote any arbitrary characters except single quotes. For example, pattern string "'{0}'" represents string "{0}", not a FormatElement. ...

    Any unmatched quote is treated as closed at the end of the given pattern. For example, pattern string "'{0}" is treated as pattern "'{0}'".

    Source http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

    0 讨论(0)
提交回复
热议问题