【发布时间】:2010-10-11 15:51:10
【问题描述】:
我刚刚写了这个方法,我想知道框架中是否已经存在类似的东西?这似乎只是其中一种方法......
如果没有,有更好的方法吗?
/// <summary>
/// Return the whitespace at the start of a line.
/// </summary>
/// <param name="trimToLowerTab">Round the number of spaces down to the nearest multiple of 4.</param>
public string GetLeadingWhitespace(string line, bool trimToLowerTab = true)
{
int whitespace = 0;
foreach (char ch in line)
{
if (ch != ' ') break;
++whitespace;
}
if (trimToLowerTab)
whitespace -= whitespace % 4;
return "".PadLeft(whitespace);
}
谢谢
编辑: 在阅读了一些 cmets 之后,很明显我还需要处理选项卡。
我不能举一个很好的例子,因为网站将空格缩小到只有一个,但我会尝试:
假设输入是一个包含 5 个空格的字符串,该方法将返回一个包含 4 个空格的字符串。如果输入少于 4 个空格,则返回 ""。
这可能会有所帮助:
input spaces | output spaces
0 | 0
1 | 0
2 | 0
3 | 0
4 | 4
5 | 4
6 | 4
7 | 4
8 | 8
9 | 8
...
【问题讨论】:
-
你能提供一些示例输入/输出吗?目前尚不清楚您要从代码中做什么。例如,如果第一个字符不是空格且
trimToLowerTab == false,则whitespace == 0。因此,无论行长如何,您总是以return "".PadLeft(0)结束。如果第二个字符不是空格,你总是以 1 个空格结束,依此类推。在这些情况下,我没有看到舍入的位置。多一点上下文也会有所帮助。 -
所以如果我给字符串
" e"(想象3个空格),该方法返回的字符串应该是“”,因为只有3个空格。但如果输入字符串为" e"(5 个空格),则返回的字符串将为" "(4 个空格)(空格总数以下最接近的 4 倍数)。如果参数为假,则仅给出前导空格而不进行任何修改。编辑:该网站从 cmets 中删除了空格... -
您可以编辑您的问题并将您的示例作为代码放在那里吗?我在您的评论中没有看到超过一个连续的空格。
-
你不想处理制表符吗? “空白”通常不仅仅是“空格”字符。
-
@Hightechrider:实际上,现在你提到它......我会的。现在将编辑问题
标签: c# string .net-4.0 whitespace