c# - 检查字符是否为符号的意外结果
问题描述
我正在创建一个字符串扩展来检查一个字符串是否都是符号,但是它没有像我期望的那样工作,到目前为止我有以下内容:
// Class for: String extensions
public static class StringExtension
{
// Method for: Determining if a string contains only symbols
public static bool ContainsOnlySymbols(this String inputString)
{
// Identifiers used are:
bool containsMore = false;
// Go through the characters of the input string checking for symbols
foreach (char character in inputString.ToCharArray())
{
// This line needs || Char.IsPunctuation(character) also
// Credit: @asantaballa
containsMore = Char.IsSymbol(character) ? false : true;
if (containsMore)
{
return containsMore;
}
}
// Return the results
return containsMore; // Edited after answer: <-- mistake here
}
}
现在,如果我在以下两个字符串上使用此扩展名,我会得到与我期望看到的相反的结果:
string testString = "!=";
我希望这都是符号,但是
I expect: testString.ContainsOnlySymbols() => true
I get: testString.ContainsOnlySymbols() => false
现在,如果我使用下一个测试字符串:
string testString = "Starts with";
我希望这没有符号
I expect: testString.ContainsOnlySymbols() => false
I get: testString.ContainsOnlySymbols() => true
解决方案
几个问题:
在您的循环中,您实际上只能获得与最后一个字符相关的选项。And or 子句应该照顾它。
containsMore = containsMore || !(Char.IsSymbol(character) || Char.IsPunctuation(character));
然后,你需要一个 not 结尾。如果它不包含更多,那么它的唯一符号
return ! containsMore;
您可能还需要一个特殊情况来处理空字符串。不知道你想如何处理。如果空字符串应该返回 true 或 false,那将是您的选择。
您可以使用单线来完成此操作。请参阅这些示例。
string x = "@#=";
string z = "1234";
string w = "1234@";
bool b = Array.TrueForAll(x.ToCharArray(), y => (Char.IsSymbol(y) || Char.IsPunctuation(y))); // true
bool c = Array.TrueForAll(z.ToCharArray(), y => (Char.IsSymbol(y) || Char.IsPunctuation(y))); // false
bool e = Array.TrueForAll(w.ToCharArray(), y => (Char.IsSymbol(y) || Char.IsPunctuation(y))); // false
推荐阅读
- node.js - 为什么即使在节点服务器和 mongodb 加载后 localhost 也没有加载?
- javascript - 如何使我的滑块具有响应高度
- angular - 从 ngx-image-cropper 返回文件以上传 - Angular
- swift - 从函数返回闭包——(期望 2 个参数,但 1 在闭包体中使用)
- python - Python:在两个类之间引用“自我”
- android - 如何按顺序播放两个动画矢量绘图?
- unit-testing - XUnit:如何断言 ASP.NET Core 中的控制器引发的异常
- javascript - 反应 + Firestore 。db.collection...set({date:date}) ==> 什么也没发生
- javascript - 在猫鼬中查询两个日期并返回匹配的文档?
- javascript - 更改特定名称:Javascript 对象中的值对