我有一个字符串“8329874566”。 我想放置 - 像这样的字符串“832-98-4566”
我可以使用哪种字符串函数?
答案 0 :(得分:15)
我会做这样的事情......
string value = "8329874566";
value = value.Insert(6, "-").Insert(3, "-");
答案 1 :(得分:13)
您将其转换为数字然后格式化字符串。 我最喜欢的是使用一些子串方法更容易阅读/理解正在发生的事情。
string str = "832984566";
string val = long.Parse(str).ToString("###-##-####");
答案 2 :(得分:8)
可能有一个几乎不可读的难以理解的正则表达式解决方案,但这个解决方案非常易读且易于使用。
.Substring()方法的第一个参数是你开始获取字符的地方,第二个是你想要获得的字符数,而不是给它设置一个默认值为value.length -1(获取字符)直到字符串结束):
String value = "8329874566";
String Result = value.Substring(0,3) + "-" + value.Substring(3,2) + "-" + value.Substring(6);
<强> - [编辑] - 强>
刚刚注意到你没有在你提供的预期结果示例中使用其中一个数字AT(数字'7'),但是如果你想要它,只需将最后一个子字符串改为“5”,如果你想要的话'7'但不想在最后一组中使用5个数字,让它像“5,4”。
答案 3 :(得分:5)
你是否想像美国社会保障号码那样做?即,在第三个和第五个数字之后用连字符?如果是这样的话:
string s = "8329874566";
string t = String.Format("{0}-{1}-{2}", s.Substring(0, 3), s.Substring(3, 2), s.Substring(5));
答案 4 :(得分:5)
完全正确,一个正则表达变体:
Regex.Replace(s, @"(\d{3})(\d{2})(\d{4})", "$1-$2-$3");
我认为Insert
变体是最干净的。
答案 5 :(得分:2)
这很好用,我觉得更清楚:
String value = "8329874566";
value = value.Insert(3, "-").Insert(6, "-");
控制台输出显示: 832-98-74566
答案 6 :(得分:0)
var result = string.Concat(value.Substring(0,3), "-", value.Substring(3,2), "-", value.Substring(5,4));
或
var value = "8329874566".Insert(3, "-").Insert(6, "-");
答案 7 :(得分:0)
如果连字符每次都在同一个地方,那么你可以简单地将原始字符串连接在一起,如下所示:
// 0123456789 <- index
string number = "8329874566";
string new = number.Substring(0, 3) + "-" + number.Substring(3, 2) + "-" + number.Substring(5);
有关制作可变字符串的一般方法,请使用StringBuilder类。这允许在调用ToString
以生成最终字符串之前进行删除和插入。
答案 8 :(得分:0)
您可以尝试以下方法:
string strNumber = "8329874566"
string strNewNumber = strNumber.Substring(0,3) + "-" + strNumber.Substring(4,2) + "-" strNumber.Substring(6)
或以这种方式的东西
答案 9 :(得分:0)
string val = "832984566";
string result = String.Format("{0}-{1}-{2}", val.Substring(0,3), val.Substring(3,2), val.Substring(5,4));
答案 10 :(得分:0)
一种简单(但不灵活)的方法是在保持计数器运行的同时循环字符串的字符。然后,您可以按字符构造新的字符串。您可以在第3个和第5个字符后添加“ - ”字符。
更好的方法可能是使用函数在特定索引处的字符串中间插入单个字符。 String.Insert()会做得很好。这里唯一需要注意的是每个插入字符串索引都会被一个字符串索引。
根据评论编辑更多特定语言
答案 11 :(得分:0)
现在,对于一般解决方案,这个怎么样?
// uglified code to fit within horizontal limits
public static string InsertAtIndices
(this string original, string insertion, params int[] insertionPoints) {
var mutable = new StringBuilder(original);
var validInsertionPoints = insertionPoints
.Distinct()
.Where(i => i >= 0 && i < original.Length)
.OrderByDescending(i => i);
foreach (int insertionPoint in validInsertionPoints)
mutable.Insert(insertionPoint, insertion);
return mutable.ToString();
}
用法:
string ssn = "832984566".InsertAtIndices("-", 3, 5);
string crazy = "42387542342309856340924803"
.InsertAtIndices(":", 1, 2, 3, 4, 5, 6, 17, 200, -1, -1, 2, 3, 3, 4);
Console.WriteLine(ssn);
Console.WriteLine(crazy);
输出:
832-98-4566
4:2:3:8:7:5:42342309856:340924803
过度破坏?是的,也许......
<子> P.S。是的,我是正式的文盲 - 我希望有一天能够纠正这一点。