C# 将包含16位数字的字符串拆分为4组
如果你看一下钱包里的塑料袋,16位数字的信用卡号被分成4组,每组4个。我试着做同样的事情 目前,我有一个字符串,它有16位数字,但它的形式是一个单一的数字。如何在第4个第8个和第12个数字后添加“” 任何提示都会非常有用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 <
谢谢有很多答案。给定一个字符串
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.