1. 程式人生 > 其它 >C#內插字串,格式化字串

C#內插字串,格式化字串

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

格式字串

在使用writewriteline時可以有一個或以上的引數

  • 如果不止一個引數,引數間使用逗號分隔
  • 第一個引數必須是字串,稱為格式字串,輸出串中可以包含替代標記
    • 替代標記在格式字串中標出位置,輸出中將用一個值進行替代
    • 替代標記由花括號{}和一個整數組成,其中整數是替換值的數字位置,替換值的位置從0
      開始編號

例子

複製程式碼  
  • 1
  • 2
  • 3
  • 4
C#
string name = "hahaha";
int simple = 10;

Console.WriteLine("Hello, World! {0} | {1}", name, simple);

輸出

複製程式碼  
  • 1
LANGUAGE-UNDEFINED
Hello, World! hahaha | 10

索引越界

複製程式碼  
  • 1
  • 2
  • 3
  • 4
C#
string name = "hahaha";
int simple = 10;

Console.WriteLine("Hello, World! {0} | {2}", name, simple);

異常提示

複製程式碼  
  • 1
LANGUAGE-MIPSASM
Unhandled exception. System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

字串插值

C#6.0 引入了字串插值它是通過直接替代字串中的替代標記進行的,這種方式更加方便並且符合閱讀習慣

  • 使用字串差值時 字串前必須新增$標記

例子

複製程式碼  
  • 1
  • 2
  • 3
  • 4
C#
string name = "hahaha";
int simple = 10;

Console.WriteLine($"Hello, World! {name} | {simple}");

輸出

複製程式碼  
  • 1
LANGUAGE-UNDEFINED
Hello, World! hahaha | 10

格式化字串

標準數字格式說明符

C#提供了很多方便的說明符對字元進行格式化

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
C#
string name = "hahaha";
int  positiveInt= 110;
long bigInt = 123456789;
int decimalInt = -10;
double price = 12.5;
float pricef = -12.543553f;
double general = 4.123456789123456789;
double percentage = 0.123456789;
名稱 字元 意義 示例
貨幣 C,c 使用貨幣符號把值格式化為貨幣,符號取決於程式所在的PC所在區域
格式 {C/c{精度說明符}(小數位數)
Console.WriteLine("{0:c4}", price);
Console.WriteLine($"{price:C5}");
輸出
¥12.5000
¥12.50000
十進位制數 D,d 十進位制字串,負數時有負號
格式 {D/d{精度說明符}(補零位數)
Console.WriteLine("十進位制數: {0:d8}", decimalInt);
Console.WriteLine($"十進位制數: {decimalInt:D5}");
輸出
-00000010
-00010
浮點數 F,f 浮點數,負數時有負號
格式 {F/f{精度說明符}(小數位數)
Console.WriteLine("浮點數 float: {0:f4}", pricef);
Console.WriteLine($"浮點數 double: {price:f5}");
輸出
-12.5433
12.50000
常規(未指定) G,g 未指定或指定為G/g時,會根據值型別轉換,浮點數時依然會四捨五入
格式 {G/g{精度說明符(小數位數)}
Console.WriteLine("常規: {0:g5}", general);
Console.WriteLine($"常規: {general:g}", general);
輸出
4.1235
4.123456789123456
十六進位制 X,x 轉換為十六進位制,字元大小寫會改變十六進位制字串的大小寫
精度如果大於長度會在前面補零,精度不夠會超過精度限制
格式 {X/x{精度說明符(補零位數)}
Console.WriteLine("十六進位制: {0:X4}", decimalInt);
Console.WriteLine($"十六進位制 {positiveInt:x6}");
輸出
FFFFFFF6
00006e
數字 N,n 轉換浮點數輸出,並且會在位數之間加入,具體是,還是空格根據設定的區域而定
格式 {X/x{精度說明符(小數位數)}
Console.WriteLine("數字: {0:N}", general);
Console.WriteLine($"數字: {bigInt:N5}");
輸出
4.12
123,456,789.00000
百分比 P,p 轉換為百分比輸出,預設保留兩位 不足的地方會四捨五入
格式 {P/p{精度說明符(小數位數)}
Console.WriteLine("百分比: {0:P}", percentage);
Console.WriteLine($"百分比: {percentage:p4}");
輸出
12.35%
12.3457%
原始值 R,r 如果之後用Parse轉換為數字,保證其和原始值相同
格式 {R/r{精度說明符(忽略,不起作用)}
Console.WriteLine("原始值: {0:R}", general);
Console.WriteLine($"原始值: {general:r9}");
輸出
4.123456789123456
4.123456789123456
科學計數法 E,e 轉換為科學計數法,大小寫和字元保持一致 精度不夠時四捨五入
格式 {R/r{精度說明符(小數位數)}
Console.WriteLine("科學計數法: {0:E4}", general);
Console.WriteLine($"科學計數法: {general:E6}");
輸出
4.1235E+000
4.123457E+000

對齊說明符

對齊說明符表示欄位中字元的最小寬度
如果不進行對齊我們的程式碼會輸出這樣的結果

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
C#
貨幣符號: ¥12.5000
貨幣符號: ¥12.50000
十進位制數: -00000010
十進位制數: -00010
浮點數 float: -12.5436
浮點數 double: 12.50000
常規: 4.1235
常規: 4.123456789123456
十六進位制: FFFFFFF6
十六進位制 00006e
十六進位制 6e
數字: 4.12
數字: 123,456,789.00000
百分比: 12.35%
百分比: 12.3457%
原始值: 4.123456789123456
原始值: 4.123456789123456
科學計數法: 4.1235E+000
科學計數法: 4.123457E+000

對於強迫症來說這肯定不能接受啊

來一段程式碼說明對齊說明符

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
C#
Console.WriteLine("對齊說明符: |{0, 10}|", positiveInt);
Console.WriteLine("對齊說明符: |{0, -10}|", positiveInt);

Console.WriteLine($"對齊說明符: |{positiveInt, 10}|");
Console.WriteLine($"對齊說明符: |{positiveInt, -10}|");

Console.WriteLine("對齊說明符: |{0, 10:f11}|", percentage);
Console.WriteLine("對齊說明符: |{0, -10:f4}|", percentage);

輸出

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
C#
對齊說明符: |       110|
對齊說明符: |110       |
對齊說明符: |       110|
對齊說明符: |110       |
對齊說明符: |0.12345678900|
對齊說明符: |0.1235    |
  • 正數表示右對齊,負數表示左對齊
  • 如果字元超出了限制的字元,則原限制失效
  • 在對齊基礎上可以增加格式說明符 格式 {{變數}, {字元長度}:{格式說明符}}

內插字串轉義序列

C#8.0 以後可以使用逐字轉義序列,進行轉義
格式: 在字串前加 @$ 或者 $@ 都可以

  • @加在字串開頭時,字元換內的字元不會進行轉義
  • 如果使用@$ 要在字串中包含{},需要使用{{}}

程式碼示例

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
C#
var xs = new int[] { 1, 2, 7, 9 };
var ys = new int[] { 7, 9, 12 };
Console.WriteLine($"Find the intersection of the {{{xs}}} and {{{string.Join(", ",ys)}}} sets.");

var userName = "Jane";
var stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
var verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);

在內插字串中使用三元運算子

由於:在內插表示式選項中有特殊含義(比如: 字元格式說明符前要使用),所以條件運算子需要放在括號內

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
C#
var rand = new Random();
for (int i = 0; i < 7; i++)
{
    Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5? "heads" : "tails")}");
}
複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
C#
Coin flip: heads
Coin flip: tails
Coin flip: heads
Coin flip: heads
Coin flip: tails
Coin flip: heads
Coin flip: tails

來源:https://www.cnblogs.com/xslx/p/15705784.html

格式字串

在使用writewriteline時可以有一個或以上的引數

  • 如果不止一個引數,引數間使用逗號分隔
  • 第一個引數必須是字串,稱為格式字串,輸出串中可以包含替代標記
    • 替代標記在格式字串中標出位置,輸出中將用一個值進行替代
    • 替代標記由花括號{}和一個整數組成,其中整數是替換值的數字位置,替換值的位置從0開始編號

例子

複製程式碼  
  • 1
  • 2
  • 3
  • 4
C#
string name = "hahaha";
int simple = 10;

Console.WriteLine("Hello, World! {0} | {1}", name, simple);

輸出

複製程式碼  
  • 1
LANGUAGE-UNDEFINED
Hello, World! hahaha | 10

索引越界

複製程式碼  
  • 1
  • 2
  • 3
  • 4
C#
string name = "hahaha";
int simple = 10;

Console.WriteLine("Hello, World! {0} | {2}", name, simple);

異常提示

複製程式碼  
  • 1
LANGUAGE-MIPSASM
Unhandled exception. System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

字串插值

C#6.0 引入了字串插值它是通過直接替代字串中的替代標記進行的,這種方式更加方便並且符合閱讀習慣

  • 使用字串差值時 字串前必須新增$標記

例子

複製程式碼  
  • 1
  • 2
  • 3
  • 4
C#
string name = "hahaha";
int simple = 10;

Console.WriteLine($"Hello, World! {name} | {simple}");

輸出

複製程式碼  
  • 1
LANGUAGE-UNDEFINED
Hello, World! hahaha | 10

格式化字串

標準數字格式說明符

C#提供了很多方便的說明符對字元進行格式化

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
C#
string name = "hahaha";
int  positiveInt= 110;
long bigInt = 123456789;
int decimalInt = -10;
double price = 12.5;
float pricef = -12.543553f;
double general = 4.123456789123456789;
double percentage = 0.123456789;
名稱 字元 意義 示例
貨幣 C,c 使用貨幣符號把值格式化為貨幣,符號取決於程式所在的PC所在區域
格式 {C/c{精度說明符}(小數位數)
Console.WriteLine("{0:c4}", price);
Console.WriteLine($"{price:C5}");
輸出
¥12.5000
¥12.50000
十進位制數 D,d 十進位制字串,負數時有負號
格式 {D/d{精度說明符}(補零位數)
Console.WriteLine("十進位制數: {0:d8}", decimalInt);
Console.WriteLine($"十進位制數: {decimalInt:D5}");
輸出
-00000010
-00010
浮點數 F,f 浮點數,負數時有負號
格式 {F/f{精度說明符}(小數位數)
Console.WriteLine("浮點數 float: {0:f4}", pricef);
Console.WriteLine($"浮點數 double: {price:f5}");
輸出
-12.5433
12.50000
常規(未指定) G,g 未指定或指定為G/g時,會根據值型別轉換,浮點數時依然會四捨五入
格式 {G/g{精度說明符(小數位數)}
Console.WriteLine("常規: {0:g5}", general);
Console.WriteLine($"常規: {general:g}", general);
輸出
4.1235
4.123456789123456
十六進位制 X,x 轉換為十六進位制,字元大小寫會改變十六進位制字串的大小寫
精度如果大於長度會在前面補零,精度不夠會超過精度限制
格式 {X/x{精度說明符(補零位數)}
Console.WriteLine("十六進位制: {0:X4}", decimalInt);
Console.WriteLine($"十六進位制 {positiveInt:x6}");
輸出
FFFFFFF6
00006e
數字 N,n 轉換浮點數輸出,並且會在位數之間加入,具體是,還是空格根據設定的區域而定
格式 {X/x{精度說明符(小數位數)}
Console.WriteLine("數字: {0:N}", general);
Console.WriteLine($"數字: {bigInt:N5}");
輸出
4.12
123,456,789.00000
百分比 P,p 轉換為百分比輸出,預設保留兩位 不足的地方會四捨五入
格式 {P/p{精度說明符(小數位數)}
Console.WriteLine("百分比: {0:P}", percentage);
Console.WriteLine($"百分比: {percentage:p4}");
輸出
12.35%
12.3457%
原始值 R,r 如果之後用Parse轉換為數字,保證其和原始值相同
格式 {R/r{精度說明符(忽略,不起作用)}
Console.WriteLine("原始值: {0:R}", general);
Console.WriteLine($"原始值: {general:r9}");
輸出
4.123456789123456
4.123456789123456
科學計數法 E,e 轉換為科學計數法,大小寫和字元保持一致 精度不夠時四捨五入
格式 {R/r{精度說明符(小數位數)}
Console.WriteLine("科學計數法: {0:E4}", general);
Console.WriteLine($"科學計數法: {general:E6}");
輸出
4.1235E+000
4.123457E+000

對齊說明符

對齊說明符表示欄位中字元的最小寬度
如果不進行對齊我們的程式碼會輸出這樣的結果

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
C#
貨幣符號: ¥12.5000
貨幣符號: ¥12.50000
十進位制數: -00000010
十進位制數: -00010
浮點數 float: -12.5436
浮點數 double: 12.50000
常規: 4.1235
常規: 4.123456789123456
十六進位制: FFFFFFF6
十六進位制 00006e
十六進位制 6e
數字: 4.12
數字: 123,456,789.00000
百分比: 12.35%
百分比: 12.3457%
原始值: 4.123456789123456
原始值: 4.123456789123456
科學計數法: 4.1235E+000
科學計數法: 4.123457E+000

對於強迫症來說這肯定不能接受啊

來一段程式碼說明對齊說明符

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
C#
Console.WriteLine("對齊說明符: |{0, 10}|", positiveInt);
Console.WriteLine("對齊說明符: |{0, -10}|", positiveInt);

Console.WriteLine($"對齊說明符: |{positiveInt, 10}|");
Console.WriteLine($"對齊說明符: |{positiveInt, -10}|");

Console.WriteLine("對齊說明符: |{0, 10:f11}|", percentage);
Console.WriteLine("對齊說明符: |{0, -10:f4}|", percentage);

輸出

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
C#
對齊說明符: |       110|
對齊說明符: |110       |
對齊說明符: |       110|
對齊說明符: |110       |
對齊說明符: |0.12345678900|
對齊說明符: |0.1235    |
  • 正數表示右對齊,負數表示左對齊
  • 如果字元超出了限制的字元,則原限制失效
  • 在對齊基礎上可以增加格式說明符 格式 {{變數}, {字元長度}:{格式說明符}}

內插字串轉義序列

C#8.0 以後可以使用逐字轉義序列,進行轉義
格式: 在字串前加 @$ 或者 $@ 都可以

  • @加在字串開頭時,字元換內的字元不會進行轉義
  • 如果使用@$ 要在字串中包含{},需要使用{{}}

程式碼示例

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
C#
var xs = new int[] { 1, 2, 7, 9 };
var ys = new int[] { 7, 9, 12 };
Console.WriteLine($"Find the intersection of the {{{xs}}} and {{{string.Join(", ",ys)}}} sets.");

var userName = "Jane";
var stringWithEscapes = $"C:\\Users\\{userName}\\Documents";
var verbatimInterpolated = $@"C:\Users\{userName}\Documents";
Console.WriteLine(stringWithEscapes);
Console.WriteLine(verbatimInterpolated);

在內插字串中使用三元運算子

由於:在內插表示式選項中有特殊含義(比如: 字元格式說明符前要使用),所以條件運算子需要放在括號內

複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
C#
var rand = new Random();
for (int i = 0; i < 7; i++)
{
    Console.WriteLine($"Coin flip: {(rand.NextDouble() < 0.5? "heads" : "tails")}");
}
複製程式碼  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
C#
Coin flip: heads
Coin flip: tails
Coin flip: heads
Coin flip: heads
Coin flip: tails
Coin flip: heads
Coin flip: tails

來源:https://www.cnblogs.com/xslx/p/15705784.html