2017-06-21 81 views
3

问题:我想添加字符到手机。如何添加字符到C#中的字符串

因此,而不是显示### - ### - ####,我想显示(###)### - ####。

我试过如下:

string x = "Phone_Number"; 
string y = x.Remove(0,2);//removes the "1-" 

从这里,我不知道我怎么会添加 “()”,围绕###

任何帮助,将不胜感激。

+0

是否使用了屏蔽的编辑?这是用于Win Forms,Web还是WPF?有一些控件可以自动完成格式化,所以不需要这种代码太过挑剔。 – Arjang

+0

https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask(v=vs.110).aspx – Arjang

回答

5

值得注意的是,字符串在C#中是不可变的。这意味着如果你尝试修改一个字符串,你总会得到一个新的字符串对象。

一条路线将转换为数字(如完整性检查),然后格式化字符串

var result = String.Format("{0:(###) ###-####}", double.Parse("8005551234")) 

如果你不想做的双变换,那么你可以做这样的事情:

var result = String.Format("({0}) {1}-{2}", x.Substring(0 , 3), x.Substring(3, 3), x.Substring(6)); 

或者,如果你已经有连字符的地方,真的只是想在括号果酱,那么你可以做这样的事情:

var result = x.Insert(3, ")").Insert(0, "("); 
+0

'substring(0-3)'? – NetMage

+0

很快输入了答案..然后在2分钟后进来,并清除了任何错别字..那是其中之一。 –

1

要将字符串插入特定位置,可以使用Insert函数。

下面是一个例子:

string phone = "111-222-8765"; 
phone = phone.Insert(0, "("); // (111-222-8765 
phone = phone.Insert(3, ")"); // (111)-222-8765 
0

可以使用正则表达式来提取数字基(不管-(),然后输出在所期望的格式:

var digitGroups = Regex.Matches(x, @"(\d{3})-?(\d{3})-?(\d{4})")[0].Groups.Cast<Group>().Skip(1).Select(g => g.Value).ToArray(); 

var ans = $"({digitGroups[0]}) {digitGroups[1]}-{digitGroups[2]}"; 
+1

[“现在你有两个问题。”](https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/):) – Corey

+0

这是完全正确的。 – NetMage

0

如果连字符的位置不固定,您还可以搜索第一个连字符并使用它来格式化数字:

var index = x.IndexOf("-"); 
var res = string.Format("({0}) {1}", x.Substring(0, index), x.Substring(index + 1)); 
0

我会做这样的事情:

string FormatPhoneNumber(string phoneNumber) 
{ 
    if (string.IsNullOrEmpty(phoneNumber)) 
     throw new ArgumentNullException(nameof(phoneNumber)); 

    var phoneParts = phoneNumber.Split('-'); 
    if (phoneParts.Length < 3) 
     throw new ArgumentException("Something wrong with the input number format", nameof(phoneNumber)); 

    var firstChar = phoneParts[0].First(); 
    var lastChar = phoneParts[0].Last(); 
    if (firstChar == '(' && lastChar == ')') 
     return phoneNumber; 
    else if (firstChar == '(') 
     return $"{phoneParts[0]})-{phoneParts[1]}-{phoneParts[2]}"; 
    else if (lastChar == ')') 
     return $"({phoneParts[0]}-{phoneParts[1]}-{phoneParts[2]}"; 

    return $"({phoneParts[0]})-{phoneParts[1]}-{phoneParts[2]}"; 
} 

你会使用这样的:

string n = "123-123-1234"; 
var formattedPhoneNumber = FormatPhoneNumber(n);