2015-06-08 127 views
2

我需要能夠讀取字符串的文字長度。使用轉義字符/特殊字符/格式計算字符串的長度

實施例:

  • 「\ t」 的將是4。
  • 「\噸foobar的」 將是11
  • String.Format("\t {0, -15}", "Hello World")將是20

寫譯碼器如果我只是需要它來爲製表符和空格工作,將會很容易,但對於第三個例子,我對如何做到這一點毫無頭緒。有什麼辦法強制一個字符串在C#中解釋自己?

謝謝。

+3

對於第三個例子,調用'String.Format'這些參數,然後測量與標籤上的串(不要忘記, 「a \ t」和「\ t」都是*四個字符,如果你假設四空間的標籤)。當然,在那個分支中,您要查找的選項卡將是實際的製表符,而不是反斜槓,後跟小寫的「t」。另一種方法是重新實現'String.Format',這是瘋狂的。 「強制字符串解釋自己的方式」是「String.Format」。 –

+3

'\ t'的長度始終爲1.如果特定程序正在將其輸出到顯示器,它只會變成不同的表觀長度。例如,NotePad使用8列作爲製表符; LINQPad使用3; Visual Studio使用4;和Microsoft Word使用0.5 *英寸*。所以問題是你計算有效長度的目標是什麼?如果Tab字符是你唯一關心的東西(並且它總是在開頭,並且假設有4個字符的選項卡),一個簡單的解決方案就是「」字符串「.Replace(」\ t「 ,「」).Length'。 – mellamokb

+2

命令提示符是我正在使用的顯示器。我認爲一個標籤= 4個空格。我正在使用String.Replace作爲我當前的解決方案,但想知道是否有更好的方法。我目前的要求只是標籤,但不能保證這不會改變。 – Unome

回答

2

如果你打算控制「\ t」等於4個空格,那你爲什麼不用4個空格替換所有的「\ t」?

喜歡的東西:

public static void Main(string[] args) 
{ 
    Console.WriteLine(GetLength("\t")); 
    Console.WriteLine(GetLength("\t foobar")); 
    Console.WriteLine(GetLength(String.Format("\t {0, -15}", "Hello World"))); 
    Console.WriteLine(GetLength("a\t")); 
    Console.ReadLine(); 
} 

private static int GetLength(string str) 
{ 
    return str.Replace("\t", " ").Length; 
} 

結果:

4 
11 
20 
5 
+0

這與我目前用來解決問題的類似,我仍然好奇,如果內置到String類或某些C#庫,它會給你的解釋(我一直無法找到任何東西),但如果沒有,那麼這就是它的完成方式。 – Unome

+0

沒有,因爲沒有標準的說'\ t' == 4個空格 - 它可能是或多或少或完全是別的。 –

+0

我希望有可能會使用一些默認值,但我認爲你的權利,因爲\ t是一個變量值,沒有這些轉義字符的默認解釋器。 – Unome