c# - 获取数字的子字符串
问题描述
如果输入为 6789,则输出应为 6,7,8,9,67,78,89,678,789,6789
该逻辑应该适用于大量数字,例如 67890,12345678 等
static Int64 substrings(string n)
{
string p = string.Empty, q = string.Empty, r = string.Empty;
char[] c = n.ToCharArray();
string s = string.Empty;
Int64 res = 0;
for (int x = 0; x < n.Length; x++)
{
res += Convert.ToInt64(n[x].ToString());
}
for (int x = 0; x < n.Length; x++)
{
if (x > 0)
{
p = n[x - 1].ToString();
q = n[x].ToString();
r = p + "" + q;
p = q;
q = r[0].ToString();
res += Convert.ToInt64(r);
}
}
for(int x = 0; x < n.Length; x++)
{
if (n.Length > 2)
{
s += n[x];
}
}
if (n.Length > 2)
{
return res + Convert.ToInt64(s);
}
else
{
return res;
}
}
这是我为生成子字符串编写的代码。这种逻辑不适用于大量数字
解决方案
您可以像这样创建扩展并使用产量:
static class StringExtensions
{
public static IEnumerable<String> SplitInMultipleParts(this String s)
{
if (s == null)
throw new ArgumentNullException("s");
for (var p = 0; p < s.Length; p++)
{
for (var i = 0; i < s.Length - p; i++)
yield return s.Substring(i, p + 1);
}
}
}
你叫它:
string num = "123456789";
var result = num.SplitInMultipleParts().Select(x => Convert.ToInt64(x));
你的结果是一个枚举int64
,如果你想要列表,只需添加扩展名.ToList()
如果您不喜欢 Extension,我认为转换为简单方法对您来说不是问题...
public static IEnumerable<String> SplitInMultipleParts(String s)
ans call it : SplitInMultipleParts(num)
推荐阅读
- css - 绝对位置的 z-index 在 datepicker bootsraps 中不起作用
- javascript - 在 React JS 中上传后更改文件(重新上传文件)
- java - 在Android中滚动时如何扩展布局?
- docker - 使用 Docker USER 指令,多个 shell 命令遇到权限问题
- firebase - 如果子集合中存在,则读取 Firebase 身份验证规则不起作用
- c++ - 使用静态库时未解决的外部符号错误
- flutter - IntelliJ IDea 中的 Flutter/Dart 编译器抛出 `NoSuchMethodError: The getter 'file' was called on null.`
- html - 如何验证 ngModel 值?
- javascript - Bootstrap 无法使用 webpack 无法找到字体
- arduino - ESP12F,无法让继电器处理来自 dht11 的数据