我正在编写用户可以输入文档的应用程序。然后我阅读文档的每一行,并进一步使用属性。 在每一行中,我们有5个属性。属性由分号分隔。
例如: 如果属性名称中包含semicolo,则用户将输入属性,然后在Document中输入: “测试;用”
现在我想检查属性是否在引号中并忽略它。你们会怎么做?
以下是重要的代码段:
foreach (string line in lines)
{
if (line == "")
{
continue;
}
if (lineindex > lines.Length)
{
continue;
}
lineindex++;
string[] words = line.Split(';'); // i would add here a if statement
foreach (string word in words)
{
count++;
if (count == 6)
{
attribNewValue = "";
maskName = "";
actualAttrbValue = "";
actualAttrbName = "";
attribNameForEdit = "";
count = 1;
maskexist = false;
attribexist = false;
}
else
{
// Or here to each word
if (count == 1)
{
maskName = word;
}
else if (count == 2)
{
actualAttrbName = word;
}
else if (count == 3)
{
actualAttrbValue = word;
}
else if (count == 4)
{
attribNameForEdit = word;
}
else if (count == 5)
{
attribNewValue = word;
}
}
提前谢谢!
答案 0 :(得分:4)
您可以使用String.IndexOf(char value)
和String.LastIndexOf(char value)
来确定:
string[] words;
int semicolonIndex = line.IndexOf(';');
int firstQuoteIndex = line.IndexOf('"');
int lastQuoteIndex = line.LastIndexOf('"');
if (firstQuoteIndex == lastQuoteIndex)
continue;
if (semicolonIndex > firstQuoteIndex && semicolonIndex < lastQuoteIndex)
words = line.Split(';');
更多信息:
IndexOf()
:https://msdn.microsoft.com/en-us/library/system.string.indexof(v=vs.110).aspx
LastIndexOf()
:https://msdn.microsoft.com/en-us/library/system.string.lastindexof(v=vs.110).aspx
正如上面提到的评论之一,这也可以用比我的解决方案更少的代码行使用正则表达式来实现,但是衡量你的技能水平(没有冒犯)我认为你更容易阅读,理解和开始使用。无论是否有更优雅的解决方案,字符串操作都是一个非常基本的东西,熟悉String
类中的所有方法都是很好的,如下所示:https://msdn.microsoft.com/en-us/library/system.string_methods(v=vs.110).aspx < / p>
最后,虽然这纯粹是开发者偏好,但我建议您使用String.Empty
代替""
。这使得您的代码的意图对其他读者/开发者更明确。通过使用""
,人们可能会问&#34;他们是否意味着使用空字符串,或者他们是否输了一个错字并且没有分配他们认为他们分配的内容?&# 34;通过使用String.Empty
,毫无疑问您打算使用空字符串。所以我会if (line == String.Empty) continue;
代替if (line == "") continue;