C# Language
String.Format
Zoeken…
Invoering
De Format
zijn een reeks overbelastingen in de klasse System.String
die wordt gebruikt om tekenreeksen te maken die objecten combineren in specifieke tekenreeksrepresentaties. Deze informatie kan worden toegepast op String.Format
, verschillende WriteLine
methoden en andere methoden in het .NET-framework.
Syntaxis
- string.Format (tekenreeksindeling, params-object [] args)
- string.Format (IFormatProvider-provider, tekenreeksindeling, params-object [] args)
- $ "string {text} blablabla" // Sinds C # 6
parameters
Parameter | Details |
---|---|
formaat | Een samengestelde opmaakreeks die bepaalt hoe args tot een reeks moeten worden gecombineerd. |
args | Een reeks objecten om te combineren tot een string. Aangezien dit een params argument gebruikt, kunt u een door komma's gescheiden lijst met argumenten of een werkelijke objectarray gebruiken. |
leverancier | Een verzameling manieren om objecten naar tekenreeksen op te maken. Typische waarden zijn CultureInfo.InvariantCulture en CultureInfo.CurrentCulture . |
Opmerkingen
Opmerkingen:
-
String.Format()
verwerktnull
argumenten zonder een uitzondering te maken. - Er zijn overbelastingen die de parameter
args
vervangen door één, twee of drie objectparameters.
Plaatsen waar String.Format 'ingebed' is in het framework
Er zijn verschillende plaatsen waar u String.Format
indirect kunt gebruiken: Het geheim is om te zoeken naar de overbelasting met het handtekeningstringformaat string format, params object[] args
, bijvoorbeeld:
Console.WriteLine(String.Format("{0} - {1}", name, value));
Kan worden vervangen door een kortere versie:
Console.WriteLine("{0} - {1}", name, value);
Er zijn andere methoden die ook String.Format
gebruiken String.Format
bijvoorbeeld:
Debug.WriteLine(); // and Print()
StringBuilder.AppendFormat();
Aangepast nummerformaat gebruiken
NumberFormatInfo
kan worden gebruikt voor het opmaken van zowel gehele getallen als zwevende getallen.
// invariantResult is "1,234,567.89"
var invarianResult = string.Format(CultureInfo.InvariantCulture, "{0:#,###,##}", 1234567.89);
// NumberFormatInfo is one of classes that implement IFormatProvider
var customProvider = new NumberFormatInfo
{
NumberDecimalSeparator = "_NS_", // will be used instead of ','
NumberGroupSeparator = "_GS_", // will be used instead of '.'
};
// customResult is "1_GS_234_GS_567_NS_89"
var customResult = string.Format(customProvider, "{0:#,###.##}", 1234567.89);
Maak een aangepaste indelingsprovider
public class CustomFormat : IFormatProvider, ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (!this.Equals(formatProvider))
{
return null;
}
if (format == "Reverse")
{
return String.Join("", arg.ToString().Reverse());
}
return arg.ToString();
}
public object GetFormat(Type formatType)
{
return formatType==typeof(ICustomFormatter) ? this:null;
}
}
Gebruik:
String.Format(new CustomFormat(), "-> {0:Reverse} <-", "Hello World");
Output:
-> dlroW olleH <-
Links / rechts uitlijnen, pad met spaties
De tweede waarde in de accolades bepaalt de lengte van de vervangende string. Door de tweede waarde aan te passen als positief of negatief, kan de uitlijning van de tekenreeks worden gewijzigd.
string.Format("LEFT: string: ->{0,-5}<- int: ->{1,-5}<-", "abc", 123);
string.Format("RIGHT: string: ->{0,5}<- int: ->{1,5}<-", "abc", 123);
Output:
LEFT: string: ->abc <- int: ->123 <-
RIGHT: string: -> abc<- int: -> 123<-
Numerieke formaten
// Integral types as hex
string.Format("Hexadecimal: byte2: {0:x2}; byte4: {0:X4}; char: {1:x2}", 123, (int)'A');
// Integers with thousand separators
string.Format("Integer, thousand sep.: {0:#,#}; fixed length: >{0,10:#,#}<", 1234567);
// Integer with leading zeroes
string.Format("Integer, leading zeroes: {0:00}; ", 1);
// Decimals
string.Format("Decimal, fixed precision: {0:0.000}; as percents: {0:0.00%}", 0.12);
Output:
Hexadecimal: byte2: 7b; byte4: 007B; char: 41
Integer, thousand sep.: 1,234,567; fixed length: > 1,234,567<
Integer, leading zeroes: 01;
Decimal, fixed precision: 0.120; as percents: 12.00%
Valutanotatie
De specificator "c" (of valuta) formaat converteert een getal naar een string die een valutabedrag vertegenwoordigt.
string.Format("{0:c}", 112.236677) // $112.23 - defaults to system
precisie
Standaard is 2. Gebruik c1, c2, c3 enzovoort om de precisie te regelen.
string.Format("{0:C1}", 112.236677) //$112.2
string.Format("{0:C3}", 112.236677) //$112.237
string.Format("{0:C4}", 112.236677) //$112.2367
string.Format("{0:C9}", 112.236677) //$112.236677000
Symbool van munteenheid
- Geef de
CultureInfo
instantie door om een aangepast cultuursymbool te gebruiken.
string.Format(new CultureInfo("en-US"), "{0:c}", 112.236677); //$112.24
string.Format(new CultureInfo("de-DE"), "{0:c}", 112.236677); //112,24 €
string.Format(new CultureInfo("hi-IN"), "{0:c}", 112.236677); //₹ 112.24
- Gebruik een willekeurige string als valutasymbool. Gebruik
NumberFormatInfo
om hetNumberFormatInfo
aan te passen.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
nfi.CurrencySymbol = "?";
string.Format(nfi, "{0:C}", 112.236677); //?112.24
nfi.CurrencySymbol = "?%^&";
string.Format(nfi, "{0:C}", 112.236677); //?%^&112.24
Positie van valutasymbool
Gebruik CurrencyPositivePattern voor positieve waarden en CurrencyNegativePattern voor negatieve waarden.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
nfi.CurrencyPositivePattern = 0;
string.Format(nfi, "{0:C}", 112.236677); //$112.24 - default
nfi.CurrencyPositivePattern = 1;
string.Format(nfi, "{0:C}", 112.236677); //112.24$
nfi.CurrencyPositivePattern = 2;
string.Format(nfi, "{0:C}", 112.236677); //$ 112.24
nfi.CurrencyPositivePattern = 3;
string.Format(nfi, "{0:C}", 112.236677); //112.24 $
Negatief patroongebruik is hetzelfde als positief patroon. Veel meer use cases verwijzen wij u naar de originele link.
Aangepaste decimale scheidingsteken
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
nfi.CurrencyPositivePattern = 0;
nfi.CurrencyDecimalSeparator = "..";
string.Format(nfi, "{0:C}", 112.236677); //$112..24
Sinds C # 6.0
Sinds C # 6.0 is het mogelijk stringinterpolatie te gebruiken in plaats van String.Format
.
string name = "John";
string lastname = "Doe";
Console.WriteLine($"Hello {name} {lastname}!");
Hallo John Doe!
Meer voorbeelden hiervan onder het onderwerp C # 6.0 kenmerken: String-interpolatie .
Ontsnappende accolades binnen een String.Format () -uitdrukking
string outsidetext = "I am outside of bracket";
string.Format("{{I am in brackets!}} {0}", outsidetext);
//Outputs "{I am in brackets!} I am outside of bracket"
Datumnotatie
DateTime date = new DateTime(2016, 07, 06, 18, 30, 14);
// Format: year, month, day hours, minutes, seconds
Console.Write(String.Format("{0:dd}",date));
//Format by Culture info
String.Format(new System.Globalization.CultureInfo("mn-MN"),"{0:dddd}",date);
Console.Write($"{date:ddd}");
output:
06
Лхагва
06
specifier | Betekenis | Monster | Resultaat |
---|---|---|---|
d | Datum | {0:d} | 2016/07/06 |
dd | Dag, zonder vulling | {0:dd} | 06 |
ddd | Korte dagnaam | {0:ddd} | trouwen |
dddd | Volledige dagnaam | {0:dddd} | woensdag |
D | Lange date | {0:D} | Woensdag 6 juli 2016 |
f | Volledige datum en tijd, kort | {0:f} | Woensdag 6 juli 2016 18.30 uur |
ff | Tweede breuken, 2 cijfers | {0:ff} | 20 |
fff | Tweede breuken, 3 cijfers | {0:fff} | 201 |
ffff | Tweede breuken, 4 cijfers | {0:ffff} | 2016 |
F | Volledige datum en tijd, lang | {0:F} | Woensdag 6 juli 2016 18.30:14 uur |
g | Standaard datum en tijd | {0:g} | 6-7-2016 18.30 uur |
gg | Tijdperk | {0:gg} | ADVERTENTIE |
hh | Uur (2 cijfers, 12H) | {0:hh} | 06 |
HH | Uur (2 cijfers, 24 uur) | {0:HH} | 18 |
M | Maand en dag | {0:M} | 6 juli |
mm | Minuten, zonder voering | {0:mm} | 30 |
MM | Maand, zonder vulling | {0:MM} | 07 |
MMM | 3-letterige maandnaam | {0:MMM} | juli |
MMMM | Volledige maandnaam | {0:MMMM} | juli |
ss | seconden | {0:ss} | 14 |
r | RFC1123 datum | {0:r} | Woe, 06 jul 2016 18:30:14 GMT |
s | Sorteerbare datumstring | {0:s} | 2016-07-06T18: 30: 14 |
t | Korte tijd | {0:t} | 18.30 uur |
T | Lange tijd | {0:T} | 18.30:14 uur |
tt | AM PM | {0:tt} | P.M |
u | Universele sorteerbare lokale tijd | {0:u} | 2016-07-06 18: 30: 14Z |
U | Universele GMT | {0:U} | Woensdag 6 juli 2016 09:30:14 uur |
Y | Maand en jaar | {0:Y} | Juli 2016 |
yy | 2 cijferig jaar | {0:yy} | 16 |
yyyy | 4 cijferig jaar | {0:yyyy} | 2016 |
zz | 2-cijferige tijdzone-offset | {0:zz} | 09 |
zzz | volledige tijdzone offset | {0:zzz} | 09: 00 |
ToString ()
De methode ToString () is aanwezig op alle referentieobjecttypen. Dit komt doordat alle referentietypen zijn afgeleid van Object waarop de methode ToString () staat. De methode ToString () van de objectbasisklasse retourneert de typenaam. Het onderstaande fragment drukt "Gebruiker" af naar de console.
public class User
{
public string Name { get; set; }
public int Id { get; set; }
}
...
var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());
De klasse Gebruiker kan ToString () echter ook overschrijven om de tekenreeks te wijzigen die wordt geretourneerd. Het onderstaande codefragment drukt "Id: 5, Name: User1" af naar de console.
public class User
{
public string Name { get; set; }
public int Id { get; set; }
public override ToString()
{
return string.Format("Id: {0}, Name: {1}", Id, Name);
}
}
...
var user = new User {Name = "User1", Id = 5};
Console.WriteLine(user.ToString());
Relatie met ToString ()
Hoewel de String.Format()
-methode zeker nuttig is bij het formatteren van gegevens als tekenreeksen, kan het vaak een beetje overdreven zijn, vooral als het gaat om een enkel object, zoals hieronder te zien is:
String.Format("{0:C}", money); // yields "$42.00"
Een eenvoudigere benadering kan zijn om eenvoudigweg de methode ToString()
gebruiken die beschikbaar is op alle objecten in C #. Het ondersteunt alle dezelfde standaard- en aangepaste opmaakreeksen , maar vereist geen noodzakelijke parametertoewijzing, omdat er maar één argument is:
money.ToString("C"); // yields "$42.00"
Voorbehoud & opmaakbeperkingen
Hoewel deze aanpak in sommige scenario's eenvoudiger kan zijn, is de ToString()
-benadering beperkt met betrekking tot het toevoegen van linker- of rechteropvulling zoals u zou doen binnen de String.Format()
-methode:
String.Format("{0,10:C}", money); // yields " $42.00"
Om hetzelfde gedrag te bereiken met de methode ToString()
, moet u een andere methode gebruiken PadRight()
respectievelijk PadLeft()
of PadRight()
:
money.ToString("C").PadLeft(10); // yields " $42.00"