0
我有一個字符串「123456」。這是一個數字,如果有幫助,我們也可以將其轉換。 我想使用格式字符串來獲取「456」。那可能嗎?有些子字符串(3,6)只有一個格式字符串。有沒有辦法使用格式字符串來分割字符串?
編號:http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8(v=vs.100).aspx
我有一個字符串「123456」。這是一個數字,如果有幫助,我們也可以將其轉換。 我想使用格式字符串來獲取「456」。那可能嗎?有些子字符串(3,6)只有一個格式字符串。有沒有辦法使用格式字符串來分割字符串?
編號:http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8(v=vs.100).aspx
這是可以做到的,但我個人寧願直接使用字符串。
下面的代碼可能不會覆蓋邊緣情況,但說明了這一點:
public sealed class SubstringFormatter : ICustomFormatter, IFormatProvider
{
private readonly static Regex regex = new Regex(@"(\d+),(\d+)", RegexOptions.Compiled);
public string Format(string format, object arg, IFormatProvider formatProvider)
{
Match match = regex.Match(format);
if (!match.Success)
{
throw new FormatException("The format is not recognized: " + format);
}
if (arg == null)
{
return string.Empty;
}
int startIndex = int.Parse(match.Groups[1].Value);
int length = int.Parse(match.Groups[2].Value);
return arg.ToString().Substring(startIndex, length);
}
public object GetFormat(Type formatType)
{
return formatType == typeof(ICustomFormatter) ? this : null;
}
}
要叫它:
var formatter = new SubstringFormatter();
Console.WriteLine(string.Format(formatter, "{0:0,4}", "Hello"));
的輸出,這將是「地獄」
這不是格式化。這就像你說的那樣得到了子串。 –
你可以在其中使用正則表達式...這是一種格式字符串 –
格式字符串通常用於「格式化」一個字符串。你「只是」想要得到字符串的特定部分嗎?在這種情況下有幾種方法。這是不是很清楚你想做什麼 - 請更具體一點。 –