这是我的第一个问题,所以如果我违反了一些规则,我会道歉。我也为我平庸的英语道歉。
我的任务是使用字符串从另一个文件写入文件。它需要在开始序列和停止序列之间打印出所有内容,并忽略其他所有内容。它还应计算所有字符,单词和消息数,但仅限于开始和停止之间。启动顺序为ASCII 27(ESC)和ASCII 02(STX),停止为27 AND 02。
所以我的问题是在一个字符串中有单独的消息。一两个,没问题,但我不知道如何找到多个序列。
如果只有一个或两个,我可以使用string.IndexOf(start / stop)和LastIndexOf()。我已经尝试使用string [] array = string.Split()来运行整个字符串,但随后我将序列分开。
有谁知道如何解决这个问题?很抱歉没有代码的问题,但我刚刚开始沮丧的愤怒。如果我在这里做错了什么,请给我一些反馈意见,以便下次我能说得更好:)
答案 0 :(得分:1)
尝试String.Split
的{{3}}:
public string[] Split(
string[] separator,
StringSplitOptions options
)
我尝试过类似的事情:
string test = "blah blah blahtestblah blahtestblah";
string[] splits = test.Split(new string[] { "test" }, StringSplitOptions.RemoveEmptyEntries);
int nMessages = splits.Length;
int nWords = 0, nLetters = 0;
foreach (string str in splits)
{
Console.WriteLine(str);
nWords += str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;
nLetters += str.Length;
}
Console.WriteLine("That was {0} messages in {1} words and {2} letters", nMessages, nWords, nLetters);
现在,除了分隔符之外,它会计算所有字符。这也删除了空格,并不考虑它们的消息,也不考虑空白的单词(如双空格的情况)。也许您认为""
是一条消息......如果是,请不要使用StringSplitOptions.RemoveEmptyEntries
。
答案 1 :(得分:1)
托马斯
不确定这是否是最佳方式,但应该能满足您的需求。
const char startChar = (char)27;
const char stopChar = (char)02;
String yourInputString = "asfsdfpasdfiasdfoaisfpaosfiapsfoi";
byte[] array = Encoding.ASCII.GetBytes(yourInputString);
List<byte> buffer = new List<byte>();
for (int i = 0; i < yourInputString.Length; i++)
{
switch (Convert.ToChar(array[i]))
{
case startChar:
if (buffer.Count> 0)
WriteBufferToFile(buffer);
buffer.Add(array[i]);
break;
case stopChar:
buffer.Add(array[i]);
WriteBufferToFile(buffer);
break;
default:
buffer.Add(array[0]);
break;
}
}
希望这有帮助,