如何在字符串中插入“-”

4
我有一个字符串"8329874566"。 我想在字符串中添加 - ,就像这样 "832-98-4566"
你可以使用哪个字符串函数?

2
插入“-”的位置是否有规律,还是固定的(总是在同一位置)?此外,您的输入大小是否始终相同? - FrustratedWithFormsDesigner
它总是在第三和第五个位置之后吗? - Amish Programmer
2
我真的希望那不是你真实的社会安全号码... - JasCav
1
我更喜欢457-55-5462。http://www.dvorak.org/blog/2008/05/18/lifelock-ceo-has-his-own-identity-stolen-numerous-times/ - Greg
看起来是在第三个数字之后并替换第六个。 - Ben Voigt
显示剩余2条评论
12个回答

15

我会做类似这样的事情...

  string value = "8329874566";
  value = value.Insert(6, "-").Insert(3, "-");

3
+1. 比起纠缠于子字符串并试图保持它们的一致性,这肯定更加美好。 - Joey
3
注意,应该先插入后面的位置,这样就不会通过先插入前面的位置而使它们发生移动。 - Mike Daniels
干得好!+1,尽管这可能只是问题中的一个打字错误('7'消失了,这在我的答案中已经解释过),你没有考虑到这一点,但我猜他很快就会纠正它。 - Marcelo

13
你需要将其转换为数字,然后格式化该字符串。 我最喜欢的是,相比使用几个子字符串方法,这种方式更容易阅读/理解正在发生的事情。
string str = "832984566";
string val = long.Parse(str).ToString("###-##-####");

8

可能有一个棘手的、几乎无法阅读的正则表达式解决方案,但这个解决方案非常易读、简单。

.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”那样留下它。


感谢 Johannes Rössel 的回答,我发现它并不难懂!只需要一些时间去理解。 - Marcelo

5

您是否试图像美国社会保障号码一样进行操作?即在第三和第五个数字后加一个连字符?如果是这样的话:

string s = "8329874566";
string t = String.Format("{0}-{1}-{2}", s.Substring(0, 3), s.Substring(3, 2), s.Substring(5));

5

为了完整起见,这里提供一个正则表达式的变体:

Regex.Replace(s, @"(\d{3})(\d{2})(\d{4})", "$1-$2-$3");

我认为插入方式是最干净的方式。


@mar:$1并不匹配任何东西,因为它甚至不是正则表达式的一部分。 正则表达式本身是(\d{3})(\d{2})(\d{4})。 它使用括号创建捕获组,分别为三个数字、两个数字和四个数字长。 这些组被编号,并且可以在替换字符串中引用。 这样的引用采用$1$2等形式。 表达式中组的顺序决定了它们关联的数字,而$0则指完全匹配。 - Joey
@Marcelo:一个好的参考和学习点是网站http://regularexpressions.info。你在这里的解释是相当错误的。关键是*只有*捕获组(用括号表示[除了`(?...)`])生成反向引用(它们在正则表达式本身中是`\1`,在替换部分中是`$1` [至少对于.NET,其他风格可能不同])。在你的例子中,只有一个带括号的部分,即(3|4),这意味着替换中只有$1;所有其他都是无效的。[]{}不会生成反向引用。 - Joey
@Marcelo:我发现PowerShell也是一个很好的工具,可以玩转.NET的各个部分。对于正则表达式,有-match-replace-split运算符,可以快速测试某些内容。 - Joey

2

这个很好用,我认为更加清晰易懂:

    String value = "8329874566";
    value = value.Insert(3, "-").Insert(6, "-");

控制台输出显示如下: 832-98-74566

0
var result = string.Concat(value.Substring(0,3), "-", value.Substring(3,2), "-", value.Substring(5,4));

或者

var value = "8329874566".Insert(3, "-").Insert(6, "-");

0
如果连字符每次都要放在同一个位置,那么你可以像这样简单地将原始字符串的各个部分连接在一起:
//               0123456789 <- index
string number = "8329874566";
string new = number.Substring(0, 3) + "-" + number.Substring(3, 2) + "-" + number.Substring(5);

关于创建可变字符串的通用方法,请使用 StringBuilder 类。在调用 ToString 方法生成最终字符串之前,此类允许进行删除和插入操作。


0
你可以尝试以下方法:
string strNumber = "8329874566"
string strNewNumber = strNumber.Substring(0,3) + "-" + strNumber.Substring(4,2) + "-" strNumber.Substring(6)

或者以类似的方式


0
string val = "832984566";  
string result = String.Format("{0}-{1}-{2}", val.Substring(0,3), val.Substring(3,2), val.Substring(5,4));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接