You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#字符串校验问题:EndsWith用法及特定点字符匹配需求

嘿,我来帮你搞定这两个字符串检查的问题,顺便把你之前代码里的坑填上~

需求1:检查字符串是否以“.后跟任意3个字符”结尾

首先得说清楚:EndsWith()方法只能匹配固定后缀,没法直接匹配“任意3个字符”,所以得换个思路,这里给你两种可行的方案:

方法1:结合Substring手动判断

先确保字符串长度至少4(毕竟“.xxx”是4个字符),然后取最后4位的第一个字符是“.”,剩下的三位只要存在就符合要求:

string myString = "www.stackoverflow.com";
// 先判断长度足够,再检查最后4位的首字符是点号
bool endsWithDotThree = myString.Length >= 4 && myString.Substring(myString.Length - 4, 1) == ".";
Console.WriteLine(endsWithDotThree); // 这里会输出true,因为结尾是.com,符合条件

方法2:正则表达式(更简洁)

如果觉得手动截取麻烦,用正则的结尾锚定$来匹配格式,代码更直观:

using System.Text.RegularExpressions;

string myString = "www.stackoverflow.com";
// \.转义匹配点号,.{3}匹配任意3个字符,$表示字符串结尾
bool endsWithDotThree = Regex.IsMatch(myString, @"\.{1}.{3}$");
Console.WriteLine(endsWithDotThree);

需求2:检查“.”前不是“www”,以及检查“.”前后有指定Y个字符

先修正你之前的代码错误

你之前写的!myString.Contains(".".StartsWith("www"))逻辑完全错啦!".".StartsWith("www")返回的是一个布尔值(肯定是false),但Contains()需要传入字符串,所以编译器才会报“无法将bool转换为string”的错误。用dynamic虽然编译过,但运行时会因为类型不匹配直接崩溃,这绝对不是正确的做法。

正确检查“.”前不是“www”的方法

方法1:通过索引定位判断

先找到字符串中点号的位置,再检查它前面的3个字符是不是“www”:

string myString = "www.stackoverflow.com";
int dotIndex = myString.IndexOf('.');
bool dotNotAfterWww = false;

if (dotIndex != -1) // 先确保字符串里确实有“.”
{
    // 如果点号的位置小于3,说明前面不够3个字符,肯定不是www;否则截取前面3个字符对比
    dotNotAfterWww = dotIndex < 3 || myString.Substring(dotIndex - 3, 3) != "www";
}
Console.WriteLine(dotNotAfterWww); 
// 这里第一个点号前面是www,所以输出false;如果是“abc.stack.com”,就会输出true

方法2:正则表达式(更优雅)

用正则的负向前瞻断言,直接匹配前面不是“www”的点号,代码更简洁:

using System.Text.RegularExpressions;

string myString = "www.stackoverflow.com";
// (?!www)是负向前瞻:当前位置前面不能是www,然后匹配\.点号
bool dotNotAfterWww = Regex.IsMatch(myString, @"(?!www)\.");
Console.WriteLine(dotNotAfterWww); 
// 这里第二个点号(.com的点)前面不是www,所以会输出true;如果字符串是“www.abc”,就会输出false

检查“.”前后有指定Y个字符的方法

假设你指定的字符数是Y(比如Y=3),要检查某个点号前面至少有Y个字符,后面也至少有Y个字符,两种方案:

方法1:索引定位判断

int Y = 3;
string myString = "www.stackoverflow.com";
int dotIndex = myString.IndexOf('.');
bool hasYCharsAroundDot = false;

if (dotIndex != -1)
{
    // 前面有至少Y个字符:dotIndex >= Y;后面有至少Y个字符:总长度 - 点号索引 -1 >= Y
    hasYCharsAroundDot = dotIndex >= Y && (myString.Length - dotIndex - 1) >= Y;
}
Console.WriteLine(hasYCharsAroundDot); 
// 比如“abc.def”,Y=3时输出true;“ab.def”前面只有2个字符,输出false

方法2:正则表达式

用动态生成的正则模式,匹配前后各Y个字符的点号:

using System.Text.RegularExpressions;

int Y = 3;
string myString = "www.stackoverflow.com";
// 用{{Y}}转义大括号,生成匹配Y个字符+点号+Y个字符的模式
string pattern = $@".{{{Y}}}\.{{1}}.{{{Y}}}";
bool hasYCharsAroundDot = Regex.IsMatch(myString, pattern);
Console.WriteLine(hasYCharsAroundDot);

注意:如果要检查整个字符串就是“Y个字符+点号+Y个字符”的格式,就在模式开头加^、结尾加$锚定,比如^.{{{Y}}}\.{{1}}.{{{Y}}}$。


内容的提问来源于stack exchange,提问作者Octavylon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:27:52