假設我有一個字符串,其中包含文本文件,回車符和製表符以及全部。如何在該字符串中找到第一個空白行的索引(以包含僅包含lines-containing-whitespace)?查找字符串中空白行的索引
我已經試過:
在這種情況下,我得到一個利用一堆醜陋的代碼,找到空行的索引工作功能。必須有比這個更優雅/可讀的方式來做到這一點。
爲了清楚起見,下面的函數將字符串從提供的「標題」返回到標題後第一個空行的索引。全部提供,因爲它的大部分都是通過搜索該索引消耗的,並且爲了避免任何'爲什麼在世界上你需要空行索引'的問題。也是爲了抵消XY問題,如果它發生在這裏。
的(工作顯然,沒有測試所有的特殊情況)代碼:
// Get subsection indicated by supplied title from supplied section
private static string GetSubSectionText(string section, string subSectionTitle)
{
int indexSubSectionBgn = section.IndexOf(subSectionTitle);
if (indexSubSectionBgn == -1)
return String.Empty;
int indexSubSectionEnd = section.Length;
// Find first blank line after found sub-section
bool blankLineFound = false;
int lineStartIndex = 0;
int lineEndIndex = 0;
do
{
string temp;
lineEndIndex = section.IndexOf(Environment.NewLine, lineStartIndex);
if (lineEndIndex == -1)
temp = section.Substring(lineStartIndex);
else
temp = section.Substring(lineStartIndex, (lineEndIndex - lineStartIndex));
temp = temp.Trim();
if (temp.Length == 0)
{
if (lineEndIndex == -1)
indexSubSectionEnd = section.Length;
else
indexSubSectionEnd = lineEndIndex;
blankLineFound = true;
}
else
{
lineStartIndex = lineEndIndex + 1;
}
} while (!blankLineFound && (lineEndIndex != -1));
if (blankLineFound)
return section.Substring(indexSubSectionBgn, indexSubSectionEnd);
else
return null;
}
的後續編輯:
結果(主要基於康斯坦丁的答案):
// Get subsection indicated by supplied title from supplied section
private static string GetSubSectionText(string section, string subSectionTitle)
{
string[] lines = section.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
int subsectStart = 0;
int subsectEnd = lines.Length;
// Find subsection start
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Trim() == subSectionTitle)
{
subsectStart = i;
break;
}
}
// Find subsection end (ie, first blank line)
for (int i = subsectStart; i < lines.Length; i++)
{
if (lines[i].Trim().Length == 0)
{
subsectEnd = i;
break;
}
}
return string.Join(Environment.NewLine, lines, subsectStart, subsectEnd - subsectStart);
}
主結果和康斯坦丁的答案之間的差異是由於框架版本(我正在使用.NET 2.0,它不支持string []。Take),並且利用Environment.NewLine而不是硬編碼的'\ n'。比原來的通行證多得多,更漂亮,更可讀。謝謝大家!
我懷疑答案是「克里斯托弗,學RegEx」。 –
應該返回的函數是什麼?從這個問題來看,這聽起來像你想要空白行的第一個字符的索引,但該方法看起來像它返回空白行本身。 –
我應該更清楚一點;我編輯了這個問題來包含函數的目的。簡而言之,在部分中搜索子部分標題,並返回一個字符串,其中包含從找到的subsectionTitle到後面的第一個空白行的所有文本。 –