2014-02-20 15 views
5

Ich muss tatsächlich ein Dollarzeichen in Dart, vor einer Variablen drucken. Zum Beispiel:

void main() 
{ 
    int dollars=42; 
    print("I have $dollars."); // I have 42. 
} 

Ich möchte die Ausgabe sein: Ich habe 42 $. Wie kann ich das machen? Vielen Dank.

+0

hast du versucht 'print (" Ich habe \ $ dollars. "); '? (Ich weiß eigentlich nicht, Dart, ich rate nur) – FrustratedWithFormsDesigner

Antwort

7

Dart Strings können entweder roh oder .. nicht roh (normal? gekocht? interpretiert? Es gibt keinen formellen Namen). Ich werde hier mit "interpretiert" gehen, weil es das Problem beschreibt, das Sie haben.

In einer rohen Zeichenkette bedeuten "$" und "\" nichts besonderes, sie sind nur Zeichen wie jedes andere. In einer interpretierten Zeichenfolge startet "$" eine Interpolation und "\" startet einen Escape-Befehl.

Da Sie die Interpolation für „$ Dollar“ möchten, können Sie nicht verwenden „$“ wörtlich, so dass Sie es entkommen müssen:

int dollars = 42; 
print("I have \$$dollars."); 

Wenn Sie eine Flucht nicht verwenden möchten , können Sie die Zeichenfolge aus rohen und interpretiert Teile kombinieren:

int dollars = 42; 
print(r"I have $" "$dollars."); 

Zwei benachbarte Stringliterale in eine Zeichenfolge kombiniert werden, auch wenn sie unterschiedliche Arten von Zeichenfolge sind.

+0

Beide Methoden funktionieren gut. Aus irgendeinem Grund habe ich rohe Stiche vergessen. Danke vielmals. – rchkm

+0

Es gibt eine noch ausgefeiltere Lösung, die ich nicht empfehlen möchte, aber ich denke, es ist erwähnenswert, dass ein String-Literal als Ausdruck einer String-Interpolation verwendet wird: 'print (" I have $ {r "$" } $ Dollar. ")'. Es ist ... interessant, aber ich habe keinen Fall gefunden, in dem es bequemer ist, als nur benachbarte Zeichenfolgenliterale zu haben. – lrn

4

können Sie einen Backslash zu entkommen verwenden:

int dollars=42; 
print("I have \$$dollars."); // I have $42. 

Wenn Sie Literale anstelle von Variablen verwenden Sie auch rohe Strings verwenden können:

print(r"I have $42."); // I have $42.