我有一个值为#34; 1131200001103"。
的字符串如何以此格式将其显示为字符串" 11-312-001103"使用Response.Write(value)?
由于
答案 0 :(得分:14)
您不想只使用Substring
?
string dashed = text.Substring(0, 2) + "-" +
text.Substring(2, 3) + "-" +
text.Substring(7);
或者:
string dashed = string.Format("{0}-{1}-{2}", text.Substring(0, 2),
text.Substring(2, 3), text.Substring(7));
(我假设你故意错过了0中的两个?不清楚哪个 0s,不可否认......)
显然你应该首先验证字符串是否正确...
答案 1 :(得分:13)
这会产生所需的结果
string result = Int64.Parse(s.Remove(5,2)).ToString("00-000-000000");
假设您要在2个第一个空值的位置删除2个字符。
答案 2 :(得分:6)
您可以尝试使用正则表达式并将其放在扩展方法ToMaskedString()
中public static class StringExtensions
{
public static string ToMaskedString(this String value)
{
var pattern = "^(/d{2})(/d{3})(/d*)$";
var regExp = new Regex(pattern);
return regExp.Replace(value, "$1-$2-$3");
}
}
然后致电
respne.Write(value.ToMaskedString());
答案 3 :(得分:3)
也许像
string result = str.SubString(0, 2) + "-" + str.SubString(2, 3) + "-" + str.SubString(7);
str是“11312000011103”字符串
答案 4 :(得分:0)
我写了一个用于相同/相似目的的快速扩展方法(从某种意义上说,没有办法跳过字符)
用法:
var testString = "12345";
var maskedString = testString.Mask("##.## #"); // 12.34 5
方法:
public static string Mask(this string value, string mask, char substituteChar = '#')
{
int valueIndex = 0;
try
{
return new string(mask.Select(maskChar => maskChar == substituteChar ? value[valueIndex++] : maskChar).ToArray());
}
catch (IndexOutOfRangeException e)
{
throw new Exception("Value too short to substitute all substitute characters in the mask", e);
}
}
答案 5 :(得分:0)
我补充了@ESipalis 的回答
扩展方法接受要替换的字符数组
public static string Mask(this string value, string mask, char[] substituteChar)
{
int valueIndex = 0;
try
{
return new string(mask.Select(maskChar => substituteChar.Contains(maskChar) ? value[valueIndex++] : maskChar).ToArray());
}
catch (IndexOutOfRangeException e)
{
return "#ERROR";
}
}
你可以拨打分机:
yourString.Mask("AAA-999(SSS)","AS9".ToArray())