2012-07-11 37 views
5

Tôi có một chuỗi như thế này;Làm thế nào để chèn/loại bỏ dấu gạch ngang đến/từ một chuỗi đồng bằng trong C#?

string text = "6A7FEBFCCC51268FBFF"; 

Và tôi có một phương pháp mà Tôi muốn chèn logic cho phụ dấu nối sau 4 ký tự để 'text' biến. Vì vậy, đầu ra phải như thế này;

6A7F-EBFC-CC51-268F-BFF 

Gắn dấu gạch ngang vào logic biến 'văn bản' phải nằm trong phương thức này;

public void GetResultsWithHyphen 
{ 
    // append hyphen after 4 characters logic goes here 
} 

Và tôi muốn cũng loại bỏ các gạch nối từ một chuỗi cho trước như 6A7F-EBFC-CC51-268F-BFF. Vì vậy, việc loại bỏ dấu nối từ một chuỗi ký tự phải nằm trong phương thức này;

public void GetResultsWithOutHyphen 
{ 
    // Removing hyphen after 4 characters logic goes here 
} 

Tôi có thể làm điều này bằng C# (cho ứng dụng dành cho máy tính để bàn) như thế nào? Cách tốt nhất để làm điều này là gì? Đánh giá cao câu trả lời của mọi người trước.

+0

Bạn đã thử gì? Nhìn vào String.Insert hoặc String.Replace hoặc String.Remove? –

+0

Bạn không có ý định sử dụng từng tham số chuỗi và trả về một chuỗi? Đoạn mã của bạn đề xuất mỗi phương thức sẽ không trả lại gì. – psych

+0

Tôi không biết làm cách nào để thực hiện việc này –

Trả lời

7

GetResultsWithOutHyphen rất dễ dàng (và phải trả lại một string thay vì void

public string GetResultsWithOutHyphen(string input) 
{ 
    // Removing hyphen after 4 characters logic goes here 
    return input.Replace("-", ""); 
} 

cho GetResultsWithHyphen, có thể có những cách tinh quái để làm điều đó, nhưng đây là một cách:

public string GetResultsWithHyphen(string input) 
{ 

    // append hyphen after 4 characters logic goes here 
    string output = ""; 
    int start = 0; 
    while (start < input.Length) 
    { 
     output += input.Substring(start, Math.Min(4,input.Length - start)) + "-"; 
     start += 4; 
    } 
    // remove the trailing dash 
    return output.Trim('-'); 
} 
+0

'in' và' out' là cả hai từ khóa, bạn cần tên biến khác nhau :) –

+1

@ BaliC vô nghĩa! Sử dụng '@ in' và' @ out' để thay thế! : P –

+0

Trường hợp dấu nối được nối vào phương thức GetResultsWithHyphen? –

1
var hyphenText = new string(
    text 
.SelectMany((i, ch) => i%4 == 3 && i != text.Length-1 ? new[]{ch, '-'} : new[]{ch}) 
.ToArray() 

)

4

Sử dụng regex:

public String GetResultsWithHyphen(String inputString) 
{ 
    return Regex.Replace(inputString, @"(\w{4})(\w{4})(\w{4})(\w{4})(\w{3})", 
             @"$1-$2-$3-$4-$5"); 
} 

và để xóa:

public String GetResultsWithOutHyphen(String inputString) 
{ 
    return inputString.Replace("-", ""); 
} 
+0

Tôi thích việc bạn sử dụng Regex! Tôi không nghĩ đến việc sử dụng chúng thường xuyên như tôi cần. – gb92

+0

Nhận xét/chỉnh sửa cho biết rằng độ dài là ngẫu nhiên và không được cố định thành 19 ký tự vì vậy tôi không nghĩ rằng regex này sẽ hoạt động. –

0

Đối với loại bỏ:

String textHyphenRemoved=text.Replace('-',''); should remove all of the hyphens 

để thêm

StringBuilder strBuilder = new StringBuilder(); 
int startPos = 0; 
for (int i = 0; i < text.Length/4; i++) 
{ 
    startPos = i * 4; 
    strBuilder.Append(text.Substring(startPos,4)); 

    //if it isn't the end of the string add a hyphen 
    if(text.Length-startPos!=4) 
     strBuilder.Append("-"); 
} 
//add what is left 
strBuilder.Append(text.Substring(startPos, 4)); 
string textWithHyphens = strBuilder.ToString(); 

Đừng lưu ý rằng mã thêm của tôi là chưa được kiểm tra.

+0

Không hoạt động đúng cách. – aquinas

1
public static string GetResultsWithHyphen(string str) { 
    return Regex.Replace(str, "(.{4})", "$1-"); 
    //if you don't want trailing - 
    //return Regex.Replace(str, "(.{4})(?!$)", "$1-"); 
} 

public static string GetResultsWithOutHyphen(string str) {    
    //if you just want to remove the hyphens: 
    //return input.Replace("-", ""); 
    //if you REALLY want to remove hyphens only if they occur after 4 places: 
    return Regex.Replace(str, "(.{4})-", "$1"); 
} 
+0

Lưu ý rằng nếu độ dài chuỗi là bội số của 4, điều này sẽ thêm dấu gạch chéo. –

+0

Vâng ... vâng :). Tôi sẽ theo spec. :) – aquinas

+0

@ChrisSinclair Đã cập nhật câu trả lời – aquinas

1

cái gì đó dọc theo dòng:

public string GetResultsWithHyphen(string inText) 
{ 
    var counter = 0; 
    var outString = string.Empty; 
    while (counter < inText.Length) 
    { 
     if (counter % 4 == 0) 
      outString = string.Format("{0}-{1}", outString, inText.Substring(counter, 1)); 
     else 
      outString += inText.Substring(counter, 1); 
     counter++; 
    } 
    return outString; 
} 

Đây là mã thô và có thể không hoàn hảo, đúng cú pháp

2

Đây là regex ngắn nhất tôi có thể nghĩ ra. Nó sẽ hoạt động trên các chuỗi có độ dài bất kỳ. Lưu ý rằng mã thông báo \ B sẽ ngăn không cho nó khớp với nhau ở cuối chuỗi, do đó bạn không phải cắt bỏ một dấu nối thừa như với một số câu trả lời ở trên.

using System; 
using System.Text.RegularExpressions; 
namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string text = "6A7FEBFCCC51268FBFF"; 
      for (int i = 0; i <= text.Length;i++) 
       Console.WriteLine(hyphenate(text.Substring(0, i))); 
     } 

     static string hyphenate(string s) 
     { 
      var re = new Regex(@"(\w{4}\B)"); 
      return re.Replace (s, "$1-"); 
     } 

     static string dehyphenate (string s) 
     { 
      return s.Replace("-", ""); 
     } 
    } 
} 
0

GetResultsWithOutHyphen method

public string GetResultsWithOutHyphen(string input) 
{ 

    return input.Replace("-", ""); 

} 

GetResultsWithOutHyphen method

Bạn có thể vượt qua một biến thay vì bốn sự linh hoạt.

public string GetResultsWithHyphen(string input) 
{ 

string output = ""; 
     int start = 0; 
     while (start < input.Length) 
     { 
      char bla = input[start]; 
      output += bla; 
      start += 1; 
      if (start % 4 == 0) 
      { 
       output += "-";  
      } 
     } 
return output; 
} 
0

này làm việc cho tôi khi tôi đã có một giá trị đối với một số an sinh xã hội (123456789) và cần nó để hiển thị như (123-45-6789) trong một ListBox.

ListBox1.Items.Add("SS Number : " & vbTab & Format(SSNArray(i), "###-##-####")) 

Trong trường hợp này tôi có một dãy số an sinh xã hội. Dòng mã này thay đổi định dạng để đặt dấu gạch ngang.

Các vấn đề liên quan