我有一个字符串"8329874566"。
我想在字符串中添加 - ,就像这样 "832-98-4566"
你可以使用哪个字符串函数?
你可以使用哪个字符串函数?
我会做类似这样的事情...
string value = "8329874566";
value = value.Insert(6, "-").Insert(3, "-");
string str = "832984566";
string val = long.Parse(str).ToString("###-##-####");
可能有一个棘手的、几乎无法阅读的正则表达式解决方案,但这个解决方案非常易读、简单。
.Substring() 方法的第一个参数是从哪里开始获取字符,第二个参数是你想要获取的字符数,不给它设置默认值为 value.length -1(获取字符串直到末尾):
String value = "8329874566";
String Result = value.Substring(0,3) + "-" + value.Substring(3,2) + "-" + value.Substring(6);
--[编辑]--
我发现你在预期结果示例中根本没有使用一个数字(数字“7”),但如果你需要它,只需将最后一个子字符串更改为“5”,如果你想要“7”但不想要最后一组中的5个数字,则可像“5,4”那样留下它。
您是否试图像美国社会保障号码一样进行操作?即在第三和第五个数字后加一个连字符?如果是这样的话:
string s = "8329874566";
string t = String.Format("{0}-{1}-{2}", s.Substring(0, 3), s.Substring(3, 2), s.Substring(5));
为了完整起见,这里提供一个正则表达式的变体:
Regex.Replace(s, @"(\d{3})(\d{2})(\d{4})", "$1-$2-$3");
我认为插入
方式是最干净的方式。
$1
并不匹配任何东西,因为它甚至不是正则表达式的一部分。 正则表达式本身是(\d{3})(\d{2})(\d{4})
。 它使用括号创建捕获组,分别为三个数字、两个数字和四个数字长。 这些组被编号,并且可以在替换字符串中引用。 这样的引用采用$1
,$2
等形式。 表达式中组的顺序决定了它们关联的数字,而$0
则指完全匹配。 - Joey(3|4)
,这意味着替换中只有$1
;所有其他都是无效的。[]
或{}
不会生成反向引用。 - Joey-match
、-replace
和-split
运算符,可以快速测试某些内容。 - Joey这个很好用,我认为更加清晰易懂:
String value = "8329874566";
value = value.Insert(3, "-").Insert(6, "-");
var result = string.Concat(value.Substring(0,3), "-", value.Substring(3,2), "-", value.Substring(5,4));
或者
var value = "8329874566".Insert(3, "-").Insert(6, "-");
// 0123456789 <- index
string number = "8329874566";
string new = number.Substring(0, 3) + "-" + number.Substring(3, 2) + "-" + number.Substring(5);
关于创建可变字符串的通用方法,请使用 StringBuilder 类。在调用 ToString
方法生成最终字符串之前,此类允许进行删除和插入操作。
string strNumber = "8329874566"
string strNewNumber = strNumber.Substring(0,3) + "-" + strNumber.Substring(4,2) + "-" strNumber.Substring(6)
或者以类似的方式
string val = "832984566";
string result = String.Format("{0}-{1}-{2}", val.Substring(0,3), val.Substring(3,2), val.Substring(5,4));