天天看點

linux括号轉義字元串,C#格式化字元串中轉義大括号“{}”

轉自:https://blog.csdn.net/weixin_30312659/article/details/98686107

原文:http://www.cnblogs.com/fsjohnhuang/articles/2451964.html

今天,用C#寫程式操作Excel,讀取單元格内容根據所需格式生成字元串,使用String.Format(string format,object arg0)方法。以前隻知“{0}”為索引占位符(即格式項),與參數清單中的第一個對象相對應,格式設定過程将每個格式項替換為對應對象的值的文本表示形式。但這次需将參數對象格式成一對大括号括起來的格式,即傳回字元串“{對象arg0的文本表示形式}”。

//直接加大括号

String.Format("{{0}}",1);

如果使用上面語句,并不能獲得所需結果“{1}”,因為左大括号和右大括号被解釋為格式項的開始和結束,如果要在format參數中指定大括号字元,須使用轉義序列顯示文本左大括号或右大括号。在格式化字元串中這個轉義字元還是大括号本身。是以,在固定文本中指定兩個左大括号 (“{{”) 以顯示一個左大括号 (“{”),或指定兩個右大括号 (“}}”) 以顯示一個右大括号 (“}”)。

//本例的一種正确方式

String.Format("{{{0}}}",1);

按照在format中遇到大括号的順序依次解釋它們,不支援解釋嵌套的大括号。雖然上面能得到正确結果,但解釋轉義大括号的方式會導緻意外的結果。例如,考慮要顯示一個左大括号、一個格式化為十進制數的數值和一個右大括号的格式項“{{{0:D}}}“。但是,實際是按照以下方式解釋該格式項:

1、前兩個左大括号 ("{{") 被轉義,生成一個左大括号;

2、之後的三個字元 ("{0:") 被解釋為格式項的開始。

3、下一個字元 ("D") 将被解釋為 Decimal 标準數值格式說明符,但後面的兩個轉義大括号 ("}}") 生成單個大括号。由于得到的字元串 ("D}") 不是标準數值格式說明符号,是以得到的字元串會被解釋為用于顯示字元串“D}”的自定義格式字元串。

4、最後一個大括号 ("}") 被解釋為格式項的結束。

5、顯示的最終結果是字元串“{D}”。不會顯示本來要格式化的數值。

在編寫代碼時,避免錯誤解釋轉義大括号和格式項的一種方法是單獨格式化大括号和格式項。也就是說,在第一個格式化操作中顯示文本左大括号,在下一操作中顯示格式項的結果,然後在最後一個操作中顯示文本右大括号。

//正确無誤的形式

String.Format("{0}{1}{2}","{",1,"}");