Freigeben über


MessageFormat Klasse

Definition

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

[Android.Runtime.Register("java/text/MessageFormat", DoNotGenerateAcw=true)]
public class MessageFormat : Java.Text._Format
[<Android.Runtime.Register("java/text/MessageFormat", DoNotGenerateAcw=true)>]
type MessageFormat = class
    inherit _Format
Vererbung
MessageFormat
Attribute

Hinweise

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen. Verwenden Sie dies, um Meldungen zu erstellen, die für Endbenutzer angezeigt werden.

MessageFormat nimmt eine Reihe von Objekten an, formatiert sie und fügt dann die formatierten Zeichenfolgen an den entsprechenden Stellen in das Muster ein.

<strong>Hinweis:</strong>MessageFormat unterscheidet sich von den anderen Format Klassen dadurch, dass Sie ein MessageFormat Objekt mit einem seiner Konstruktoren (nicht mit einer getInstance Style Factory-Methode) erstellen. Die Factorymethoden sind nicht erforderlich, da MessageFormat selbst kein gebietsschemaspezifisches Verhalten implementiert wird. Jedes gebietsschemaspezifische Verhalten wird durch das von Ihnen bereitgestellte Muster und die für eingefügte Argumente verwendeten Unterformate definiert.

<h2>"patterns"Patterns">Patterns and Their Interpretation</h2>

MessageFormat verwendet Muster der folgenden Form: <blockquote>

<i>MessageFormatPattern:</i>
<i>String</i>
<i>MessageFormatPattern</i> <i>FormatElement</i> <i>String</i>

<i>FormatElement:</i>
                    { <i>ArgumentIndex</i> }
                    { <i>ArgumentIndex</i> , <i>FormatType</i> }
                    { <i>ArgumentIndex</i> , <i>FormatType</i> , <i>FormatStyle</i> }

<i>FormatType: one of </i>
                    number date time choice

<i>FormatStyle:</i>
                    short
                    medium
                    long
                    full
                    integer
                    currency
                    percent
<i>SubformatPattern</i>

</Blockquote>

Innerhalb einer Zeichenfolge kann ein Paar einzelner Anführungszeichen verwendet werden, um beliebige Zeichen mit Ausnahme einzelner Anführungszeichen anzuweisen. Die Musterzeichenfolge "'{0}'" stellt beispielsweise eine Zeichenfolge "{0}"dar, nicht ein FormatElement. Ein einzelnes Anführungszeichen selbst muss durch doppelte einzele Anführungszeichen '' in einer Zeichenfolge dargestellt werden. Beispiel: Musterzeichenfolge "'{''}'" wird als Sequenz von '{ (Anfang der Anführung und linke geschweifte Klammer), '' (ein einzelnes Anführungszeichen) und }' (rechte geschweifte Klammer und Ende der Anführung), <em>not</em>'{' und '}' (anführungszeichen links und rechts geschweifte Klammern): darstellen Zeichenfolge "{'}", <em>not</em>"{}".

Ein SubformatPattern wird durch das entsprechende Unterformat interpretiert, und es gelten unterformatabhängige Musterregeln. Die Musterzeichenfolge "{1,number,<u>$'#',##</u>}" (SubformatPattern mit Unterstrich) erzeugt beispielsweise ein Zahlenformat mit dem Pfundzeichen mit einem Ergebnis wie: "$#31,45". Ausführliche Informationen finden Sie in der Dokumentation zu den einzelnen Format Unterklassen.

Jedes nicht übereinstimmende Angebot wird am Ende des angegebenen Musters als geschlossen behandelt. Beispielsweise wird die Musterzeichenfolge "'{0"} als Muster "'{0'"} behandelt.

Alle geschweiften Klammern innerhalb eines nicht zitierungslosen Musters müssen ausgeglichen sein. Beispielsweise "ab {0} de" sind und "ab '}' de" gültige Muster, aber "ab {0'}' de", "ab } de" und "''{''" sind nicht.

<dl><dt><b>Warning:</b><dd>Die Regeln für die Verwendung von Anführungszeichen innerhalb von Nachrichtenformatmustern haben sich leider als etwas verwirrend erwiesen. Insbesondere ist es für Lokalisierungsexperten nicht immer offensichtlich, ob einzelne Anführungszeichen verdoppelt werden müssen oder nicht. Stellen Sie sicher, dass Sie Lokalisierer über die Regeln informieren und ihnen mitteilen (z. B. mithilfe von Kommentaren in Ressourcenbündelquelldateien), welche Zeichenfolgen von MessageFormatverarbeitet werden. Beachten Sie, dass Lokalisierer möglicherweise einzelne Anführungszeichen in übersetzten Zeichenfolgen verwenden müssen, wo sie in der ursprünglichen Version nicht vorhanden sind. </Dl>

Der ArgumentIndex-Wert ist eine nicht negative ganze Zahl, die mithilfe der Ziffern '0' über '9'geschrieben wird, und stellt einen Index in das Array dar, das arguments an die format Methoden oder das von den parse Methoden zurückgegebene Ergebnisarray übergeben wird.

Die Werte FormatType und FormatStyle werden verwendet, um eine Format instance für das format-Element zu erstellen. Die folgende Tabelle zeigt, wie die Werte Instanzen zugeordnet Format werden. Kombinationen, die in der Tabelle nicht angezeigt werden, sind unzulässig. SubformatPattern muss eine gültige Musterzeichenfolge für die Format verwendete Unterklasse sein.

<table class="plain"><Untertitel style="display:none">Zeigt, wie FormatType- und FormatStyle-Werte zu Format instances</Untertitel<> thead<>tr><th scope="col" class="TableHeadingColor">FormatType <th scope="col" class="TableHeadingColor">FormatStyle <th scope="col" class="TableHeadingColor">Subformat Created </thead><tbody><tr><th scope="row" style="text-weight: normal">(none)<th scope="row" style="text-weight: normal">(none)<tdnull><tr<>th scope="row" style="text-weight: normal" rowspan=5number><th scope="row" style="text-weight: normal">(none)<td(getLocale())><NumberFormat#getInstance(Locale) NumberFormat.getInstancetr<>th scope="row" style="text-weight: normal"integer<>td>NumberFormat#getIntegerInstance(Locale) NumberFormat.getIntegerInstance(getLocale())<tr><th scope="row" style="text-weight: normal"currency><tdNumberFormat#getCurrencyInstance(Locale) NumberFormat.getCurrencyInstance<(getLocale())>tr><th scope="row" style="text-weight: normal"<percent>td<NumberFormat#getPercentInstance(Locale) NumberFormat.getPercentInstance>(getLocale())tr<>th scope="row" style="text-weight: normal">SubformatPattern <tdnew(subformatPattern,(getLocale()))DecimalFormat#DecimalFormat(String,DecimalFormatSymbols) DecimalFormat<>DecimalFormatSymbols#getInstance(Locale) DecimalFormatSymbols.getInstancetr><th scope="row" style="text-weight: normal" rowspan=6>date<th scope="row" style=" text-weight: normal">(none)<td>(DateFormat#DEFAULT<DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance, getLocale())tr><th scope="row" style="text-weight: normal"><shorttd(, getLocale())>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstanceDateFormat#SHORT<tr<>th scope="row" style="text-weight: normal"><mediumtdDateFormat#DEFAULT(DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance<, getLocale())>tr<>th scope="row" style="text-weight: normal"<>longtd tr>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#LONG, getLocale())<><th scope="row" style="text-weight: normal">full<tdDateFormat#FULL(><DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance, getLocale())tr><th scope="row" style="text-weight: normal">SubformatPattern <td<>(subformatPattern, getLocale())SimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormatnewtr><th scope="row" style="text-weight: normal" rowspan=6<time>th scope="row" style="text-weight: normal">(none)<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#DEFAULT, getLocale())<Tr><th scope="row" style="text-weight: normal">short<td<DateFormat#SHORT(>, getLocale())DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstancetr><th scope="row" style="text-weight: normal"medium<>td, getLocale())<>DateFormat#DEFAULTDateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(tr<>th scope="row" style="text-weight: normal"td tr th scope="row" style="text-weight: normal"long><tdDateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstanceDateFormat#LONG><, getLocale())(tr<>th scope="row" style="text-weight: normal"<>fulltd>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#FULL, getLocale())<tr><th scope="row" style="text-weight: normal">SubformatPattern<tdnew(subformatPattern, getLocale())<>SimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormattr<>th scope="row" style="text-weight: normal"><choiceth scope="row" style="text-weight: normal">SubformatPattern <td(subformatPattern)<newChoiceFormat#ChoiceFormat(String) ChoiceFormat>/tbody></table>

<h3>Nutzungsinformationen</h3>

Im Folgenden finden Sie einige Beispiele für die Verwendung. In realen internationalisierten Programmen werden das Nachrichtenformatmuster und andere statische Zeichenfolgen natürlich aus Ressourcenbündeln abgerufen. Andere Parameter werden zur Laufzeit dynamisch bestimmt.

Im ersten Beispiel wird die statische Methode MessageFormat.formatverwendet, die intern eine MessageFormat für die einmalige Verwendung erstellt: <blockquote>

int planet = 7;
            String event = "a disturbance in the Force";

            String result = MessageFormat.format(
                "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
                planet, new Date(), event);

</blockquote> Die Ausgabe lautet: <blockquote>

At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.

</Blockquote>

Im folgenden Beispiel wird eine MessageFormat instance erstellt, die wiederholt verwendet werden kann: <blockquote>

int fileCount = 1273;
            String diskName = "MyDisk";
            Object[] testArgs = {new Long(fileCount), diskName};

            MessageFormat form = new MessageFormat(
                "The disk \"{1}\" contains {0} file(s).");

            System.out.println(form.format(testArgs));

</blockquote> Die Ausgabe mit unterschiedlichen Werten für fileCount: <blockquote>

The disk "MyDisk" contains 0 file(s).
            The disk "MyDisk" contains 1 file(s).
            The disk "MyDisk" contains 1,273 file(s).

</Blockquote>

Für komplexere Muster können Sie ein ChoiceFormat verwenden, um richtige Formulare für Singular und Plural zu erstellen: <blockquote>

MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");
            double[] filelimits = {0,1,2};
            String[] filepart = {"no files","one file","{0,number} files"};
            ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
            form.setFormatByArgumentIndex(0, fileform);

            int fileCount = 1273;
            String diskName = "MyDisk";
            Object[] testArgs = {new Long(fileCount), diskName};

            System.out.println(form.format(testArgs));

</blockquote> Die Ausgabe mit unterschiedlichen Werten für fileCount: <blockquote>

The disk "MyDisk" contains no files.
            The disk "MyDisk" contains one file.
            The disk "MyDisk" contains 1,273 files.

</Blockquote>

Sie können das ChoiceFormat programmgesteuert erstellen, wie im obigen Beispiel, oder mithilfe eines Musters. Weitere Informationen finden Sie unter ChoiceFormat. <Blockquote>

{@code
            form.applyPattern(
               "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.");
            }

</Blockquote>

<strong>Hinweis:</strong> Wie wir oben sehen, wird die von einem ChoiceFormat in MessageFormat erzeugte Zeichenfolge als speziell behandelt. Vorkommen von '{' werden verwendet, um Unterformate anzugeben und eine Rekursion zu verursachen. Wenn Sie sowohl einen als MessageFormatChoiceFormat auch programmgesteuert erstellen (anstatt die Zeichenfolgenmuster zu verwenden), sollten Sie darauf achten, kein Format zu erzeugen, das sich selbst wiedergibt, was zu einer Unendlichkeitsschleife führt.

Wenn ein einzelnes Argument mehr als einmal in der Zeichenfolge analysiert wird, ist die letzte Übereinstimmung das Endergebnis der Analyse. Beispiel <: blockquote>

MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}");
            Object[] objs = {new Double(3.1415)};
            String result = mf.format( objs );
            // result now equals "3.14, 3.1"
            objs = null;
            objs = mf.parse(result, new ParsePosition(0));
            // objs now equals {new Double(3.1)}

</Blockquote>

Ebenso würde die Analyse mit einem MessageFormat Objekt mithilfe von Mustern, die mehrere Vorkommen desselben Arguments enthalten, die letzte Übereinstimmung zurückgeben. Beispiel <: blockquote>

MessageFormat mf = new MessageFormat("{0}, {0}, {0}");
            String forParsing = "x, y, z";
            Object[] objs = mf.parse(forParsing, new ParsePosition(0));
            // result now equals {new String("z")}

</Blockquote>

<h3>"synchronization"Synchronization</>h3>

Nachrichtenformate werden nicht synchronisiert. Es wird empfohlen, für jeden Thread separate Formatinstanzen zu erstellen. Wenn mehrere Threads gleichzeitig auf ein Format zugreifen, muss es extern synchronisiert werden.

In Version 1.1 hinzugefügt.

Java-Dokumentation für java.text.MessageFormat.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

MessageFormat(IntPtr, JniHandleOwnership)

Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Runtime aufgerufen.

MessageFormat(String)

Erstellt ein MessageFormat für das Standardgebietsschema java.util.Locale.Category#FORMAT FORMAT und das angegebene Muster.

MessageFormat(String, Locale)

Erstellt ein MessageFormat für das angegebene Gebietsschema und das angegebene Muster.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
Handle

Das Handle zum zugrunde liegenden Android-instance.

(Geerbt von Object)
JniIdentityHashCode

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
JniPeerMembers

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

Locale

Ruft das Gebietsschema ab, das beim Erstellen oder Vergleichen von Unterformaten verwendet wird. - oder: Legt das Gebietsschema fest, das beim Erstellen oder Vergleichen von Unterformaten verwendet werden soll.

PeerReference

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

Methoden

ApplyPattern(String)

Legt das Muster fest, das von diesem Nachrichtenformat verwendet wird.

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von _Format)
Dispose()

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
Dispose(Boolean)

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt diesem "gleich" ist.

(Geerbt von Object)
Format(Object)

Formatiert ein Objekt, um eine Zeichenfolge zu erzeugen.

(Geerbt von _Format)
Format(Object, StringBuffer, FieldPosition)

Formatiert ein Array von -Objekten und fügt das MessageFormatMuster des 's an, wobei Formatelemente durch die formatierten Objekte ersetzt werden, an das bereitgestellte StringBufferan.

Format(Object[], StringBuffer, FieldPosition)

Formatiert ein Array von -Objekten und fügt das MessageFormatMuster des 's an, wobei Formatelemente durch die formatierten Objekte ersetzt werden, an das bereitgestellte StringBufferan.

Format(String, Object[])

Formatiert ein Array von Objekten und fügt das <Codemuster>MessageFormat</code> an, wobei Formatelemente durch die formatierten Objekte ersetzt werden, an den bereitgestellten <Code>StringBuffer</code> an.

FormatToCharacterIterator(Object)

Formatiert ein Objekt, das einen erzeugt AttributedCharacterIterator.

(Geerbt von _Format)
GetFormats()

Ruft die Formate ab, die für die Formatelemente in der zuvor festgelegten Musterzeichenfolge verwendet werden.

GetFormatsByArgumentIndex()

Ruft die Formate ab, die für die Werte verwendet werden, die an format Methoden übergeben oder von parse Methoden zurückgegeben werden.

GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
Parse(String)

Analysiert Text vom Anfang der angegebenen Zeichenfolge, um ein Objektarray zu erzeugen.

Parse(String, ParsePosition)

Analysiert die Zeichenfolge.

ParseObject(String)

Analysiert Text vom Anfang der angegebenen Zeichenfolge, um ein Objekt zu erzeugen.

(Geerbt von _Format)
ParseObject(String, ParsePosition)

Analysiert Text aus einer Zeichenfolge, um ein Objektarray zu erzeugen.

SetFormat(Int32, _Format)

Legt das Format fest, das für das format-Element mit dem angegebenen Formatelementindex innerhalb der zuvor festgelegten Musterzeichenfolge verwendet werden soll.

SetFormatByArgumentIndex(Int32, _Format)

Legt das Format fest, das für die Formatelemente in der zuvor festgelegten Musterzeichenfolge verwendet werden soll, die den angegebenen Argumentindex verwenden.

SetFormats(_Format[])

Legt die Formate fest, die für die Formatelemente in der zuvor festgelegten Musterzeichenfolge verwendet werden sollen.

SetFormatsByArgumentIndex(_Format[])

Legt die Formate fest, die für die Werte verwendet werden sollen, die an format Methoden übergeben oder von parse Methoden zurückgegeben werden.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
ToPattern()

Gibt ein Muster zurück, das den aktuellen Zustand des Nachrichtenformats darstellt.

ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<><

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
IJavaPeerable.Finalized()

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Für Android-Runtime überprüfte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

GetJniTypeName(IJavaPeerable)

MessageFormat bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.

Gilt für: