Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将包含16位数字的字符串拆分为4组_C#_.net_String - Fatal编程技术网

C# 将包含16位数字的字符串拆分为4组

C# 将包含16位数字的字符串拆分为4组,c#,.net,string,C#,.net,String,如果你看一下钱包里的塑料袋,16位数字的信用卡号被分成4组,每组4个。我试着做同样的事情 目前,我有一个字符串,它有16位数字,但它的形式是一个单一的数字。如何在第4个第8个和第12个数字后添加“” 任何提示都会非常有用 谢谢有很多答案。给定一个字符串s=1234567890123456最简单的方法可能是创建一个StringBuilder并附加它。下面是未测试的代码示例 StringBuilder sb = new StringBuilder(); for (int i = 0; i <

如果你看一下钱包里的塑料袋,16位数字的信用卡号被分成4组,每组4个。我试着做同样的事情

目前,我有一个字符串,它有16位数字,但它的形式是一个单一的数字。如何在第4个第8个和第12个数字后添加“”

任何提示都会非常有用


谢谢

有很多答案。给定一个字符串
s=1234567890123456
最简单的方法可能是创建一个StringBuilder并附加它。下面是未测试的代码示例

StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; i += 4)
{
      sb.append(s.Substring(i, 4)); // Append these 4
      if (i != s.Length - 4)
          sb.append(" "); // append a space for all but the last group
}
Console.WriteLine(sb.ToString());
StringBuilder sb=新建StringBuilder();
对于(int i=0;i
尝试类似的方法,使用:

用作:

long number = 7314787188619939;
string formatted = number.ToString("n", format);
Console.WriteLine(formatted);
或者,如果您正在处理字符串,您可以选择使用正则表达式进行快速字符串操作。这将很容易适应其他角色:

string str = "7314787188619939";
str = Regex.Replace(str, "(?!^).{4}", " $0" ,RegexOptions.RightToLeft);

您可以尝试这样的扩展方法

    public static IEnumerable<String> SplitToParts(this String forSplit, Int32 splitLength) 
    {   
        for (var i = 0; i < forSplit.Length; i += splitLength)
          yield return forSplit.Substring(i, Math.Min(splitLength, forSplit.Length - i));
    }
string s ="1234123412341234";
public static IEnumerable SplitToParts(此字符串用于plit,Int32 splitLength)
{   
对于(变量i=0;i
s.SplitToParts(4)应该可以


希望这能奏效

或者如果使用MD5哈希,您可以使用这样的实现

string number = "1234567890ABCDEF";
int counter = 0;
var result = number
    .GroupBy(_ => counter++ / 4)
    .Select(g => new String(g.ToArray()));
       public string exHashMd5(string data)
    {

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(data));
            byte[] result = md5.Hash;
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                str.Append(result[i].ToString("X2"));
            }

 /// The implementation like so. (Below) 

            NumberFormatInfo format = new NumberFormatInfo();
            format.NumberGroupSeparator = " ";
            format.NumberGroupSizes = new[] { 8 };
            format.NumberDecimalDigits = 0;
            string rstr = str.ToString();
            rstr = Regex.Replace(rstr, "(?!^).{8}", " $0", RegexOptions.RightToLeft);
            return rstr.ToString();

 /// At the end you get yourself a nice 4 way split.
 /// Test it out. have a go with chucking it into a 
 /// MessageBox.Show(exHashMd5("yourstring"));

    }

 /// Could even go one further and add
     string hashtext;
     string newline = Enviroment.Newline;
     hashtext = exHashMd5("yourtext");
/// Then you do a simple command.
    MessageBox.Show(hashtext + newline + hashtext); 
/// Nice four way again. complex but yet made simple.
public string exHashMd5(字符串数据)
{
MD5CryptoServiceProvider md5=新的MD5CryptoServiceProvider();
计算哈希(ascienceoding.ASCII.GetBytes(data));
字节[]结果=md5.Hash;
StringBuilder str=新的StringBuilder();
for(int i=0;i

用数学计算出你需要它做什么。说真的,这是数学上的。将字符数除以,直到得到等于四的和。例如,32/8=4。然后,这将为您提供所需的四向拆分。基础数学。基本的。基本的。基本的

如果你做了
i+=4
你就不需要你的
If
语句了。不过,不要忘记最后一组4个字符。你完全正确,正如我所说,它未经测试-只是提供了一个参考。OP将“number”作为字符串,而不是整数。@Gabe-已经存在
:)
。不过,OP可能只是做了一个
.ToString
,所以它可能有值。很好,正则表达式是一个很好的方法:)string[]returnValue=regex.Replace(forSplit,string.Format((?!^)。{{{{0}}},splitLength),“$0”,RegexOptions.rightoleft)。Split(“”);允许将“splitLength”作为参数传递+1很高兴看到一个简单问题的简单解决方案。其他一些答案是不必要的复杂。至少到目前为止,没有人建议使用正则表达式…@Cody-对不起,我的答案中有正则表达式。正如Gabe所评论的,OP可能有一个字符串,而不是一个数字,因此这可能是一种有效的方法。此外,OP需要的是空格,而不是破折号,但这很容易解决。
string number = "1234567890ABCDEF";
int counter = 0;
var result = number
    .GroupBy(_ => counter++ / 4)
    .Select(g => new String(g.ToArray()));
       public string exHashMd5(string data)
    {

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(data));
            byte[] result = md5.Hash;
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                str.Append(result[i].ToString("X2"));
            }

 /// The implementation like so. (Below) 

            NumberFormatInfo format = new NumberFormatInfo();
            format.NumberGroupSeparator = " ";
            format.NumberGroupSizes = new[] { 8 };
            format.NumberDecimalDigits = 0;
            string rstr = str.ToString();
            rstr = Regex.Replace(rstr, "(?!^).{8}", " $0", RegexOptions.RightToLeft);
            return rstr.ToString();

 /// At the end you get yourself a nice 4 way split.
 /// Test it out. have a go with chucking it into a 
 /// MessageBox.Show(exHashMd5("yourstring"));

    }

 /// Could even go one further and add
     string hashtext;
     string newline = Enviroment.Newline;
     hashtext = exHashMd5("yourtext");
/// Then you do a simple command.
    MessageBox.Show(hashtext + newline + hashtext); 
/// Nice four way again. complex but yet made simple.