c# - 是否有 IndexOf(任何白色字符,startIndex)之类的东西?
问题描述
空白字符是单个空格、制表符、回车和换行符。要检测这些,请使用以下正则表达式:\s
我的问题是:有没有办法让我使用单个 IndexOf 语句来返回任何空白字符的索引?
//works
int index = richTextBox1.Text.IndexOf(' ', 0);
int index = richTextBox1.Text.IndexOf('\n', 0);
//doesn't work
int index = richTextBox1.Text.IndexOf('\\s', 0);
int index = richTextBox1.Text.IndexOf("\\s", 0);
'\S' 导致错误,即字符过多,而 "\s" 最终在字符串中查找 \s 只是在 "heaven" 中查找 a。我不介意检查每种类型,但如果有更好的方法,请告诉我。谢谢你。
解决方案
string.IndexOfAny(char[])
将为您提供数组中任何字符的第一个字符出现的字符串的索引。
诀窍是定义什么是“空白”。下面的示例将 25 个字符定义为空格,更常见的是' ', '\n', '\t', '\v', '\r'
. 下面将使用 unicode 定义并char.IsWhitespace
确定有哪些空白字符。
public static void Main()
{
var wsChars = Enumerable.Range(0, ushort.MaxValue)
.Where(c => char.IsWhiteSpace(Convert.ToChar(c)))
.Select(c => Convert.ToChar(c)).ToArray();
Console.WriteLine(wsChars.Length);
var someText = "This_is_a\tstring with \nsome whitespace characters.";
Console.WriteLine(someText.IndexOfAny(wsChars));
}
如果要从特定索引开始,只需使用string.IndexOfAny(char[], int)
提供起始索引。
推荐阅读
- c++11 - 问题
并使用基本名称 - html - 当导航按字体自动调整大小时,如何使图像与导航一样大?
- sql - 使用继承时违反主键唯一性
- java - HashMap 自己改变值
- vba - 循环代码没有在表单中移动
- spring-boot - 成功认证后successForwardUrl 不能与Spring Social 一起使用
- azure-application-insights - 除了 Azure 门户,还有查看 Application Insights 日志的方法吗?
- javascript - 如何从单个 NPM 包中导出多个库变体
- python-3.7 - if语句的初学者Python问题
- jinja2 - Shopify:仅针对已履行商品的部分订单迭代并显示退货按钮