c# - C# 随机分割字符串
问题描述
我有一个这样的字符串:
string str = "ABCDEFGHI"
我想要这样的结果:
string str1 = "AB";
string str2 = "CDEF";
string str3 = "G";
string str4 = "HI";
这个想法是将字符串随机划分为具有随机长度的子字符串序列。
我尝试了以下方法:
public static string SplitString(string input)
{
string result = "";
int j = 0;
for (int i = 0; i < input.Length; i++)
{
Random random = new Random();
j = random.Next(i+1, input.Length);
string subString = input.Substring(i,j); //ERROR
i = j-1;
Console.WriteLine("New substring: " + subString);
result = result + subString;
}
return result;
}
看起来这种方法根本不正确,因为当我创建一个子字符串并且i索引大于j时,程序会出现异常。
有没有办法避免这个错误?
解决方案
Substring(Int32, Int32) 从索引 i 开始提取长度为 j 的子字符串,一旦 i+j >= input.Length - i 为真,它将中断。
示例:应用于“ABCDEF”的 Substring(2,2) 应返回“CD”。在您的特定情况下,可能会有像 Substring(4,5) 这样的东西抛出异常,因为 String 没有足够的元素。在某些时候,这个循环总是会导致异常。
可以在此处找到有关使用 Substring 的更多详细信息: https ://docs.microsoft.com/en-us/dotnet/api/system.string.substring?view=netcore-3.1
您可以解决的一些问题:
- 在 1 中生成一个随机数到 input.Length - i 而不是 1 到 input.Length
- 设置 i = i + j - 1 而不是 i = j - 1
算法:
- 步
- 我 = 0
- 将 j 随机滚动到 0 到 (input.Length-1)
- 输出从索引 i 开始的 j 个首字母。
- 设置 i = i + j - 1
- 步
- 我 = j
- 将 j 随机滚动到 0 到 (input.Length-1 - i)
- 输出从索引 i 开始的 j 个首字母。
- 设置 i = i + j - 1
- 继续
推荐阅读
- r - RStudio Server Pro 版本 1.2.5033-1 上 TensorFlow(和 Keras)的解决方法
- c# - 递归连接两个文本框的每一行
- c# - 动态改变另一个类的标签值
- android - Android上的伪本地化不起作用
- python - 在task_done之前发生异常时的python队列
- node.js - 我使用了“cors”,但发现“对 XMLHttpRequest 的访问已被阻止”。为什么?
- pysimplegui - 如何删除弹出窗口中的“确定”按钮(PySimpleGUI)
- java - 在while循环Java中将先前的[随机]变量与当前的[随机]变量进行比较
- php - JSON:使用 url JSON 更新 base64 字符串
- python - 从熊猫的数据透视表中绘制折线图