是否有使用正则表达式检测字符串是否包含大写字符的替代方法?下面是一个正则表达式:
Regex.IsMatch(fullUri, "[A-Z]")
字符串它工作得很好,但我经常听到一句老话:“如果你使用正则表达式,你现在有两个问题”。
fnvucqvd1#
你可以使用LINQ:
fullUri.Any(char.IsUpper);
字符串
p8ekf7hl2#
RegEx似乎有点过头了:
bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);
mm5n2pyu3#
你也可以这样做(如果你想在.NET 1.0中工作的话:):
bool hasUpperCase = !fullUri.ToLower().Equals(fullUri);
字符串尽管如此简单的正则表达式可能工作正常
gblwokeq4#
使用LINQ!
fullUri.Any(c => char.IsUpper(c));
f3temu5u5#
你的正则表达式只会找到ASCII大写字母。方便的是,.NET正则表达式引擎是Unicode感知的,使您能够
Regex.IsMatch(fullUri, @"\p{Lu}")
字符串尽管我认为在您的情况下,您不希望字符串中包含非ASCII字母(考虑到其名称)。
iyzzxitl6#
使用 for 循环,它不像其他方法那样高效和可读,但对于初学者来说,它应该可以工作并提供一种全面的方法来做到这一点:
int counter = 0; for(int i=0; i< myString.Length; i++) { // If the character is uppercase, add +1 to the counter if(char.IsUpper(chaineNonPascale[i])) { counter++; } }
字符串基本上,您迭代字符串并检查大写字符。然后,您可以添加关于如何处理大写字符的逻辑。例如,在找到第二个大写字符的地方插入一个空格,然后对整个字符串使用ToLower方法...
hc2pp10m7#
使用大型字符串时,使用LINQ可能会影响性能。您也可以使用ASCII级别的比较。
byte[] asciiBytes = Encoding.ASCII.GetBytes(fullUri); for (int i = 0; i < asciiBytes.Length; i++) { if (asciiBytes[i] > 64 && asciiBytes[i] < 91) { return true; } }
x8goxv8g8#
用途:
string text = "Hello, World!"; char[] Letters = text.ToCharArray(); IEnumerable Sentence = from l in Letters where char.IsUpper(l) select l; IEnumerator enumerator = Sentence.GetEnumerator(); while (enumerator.MoveNext()) { return true; } return false;
8条答案
按热度按时间fnvucqvd1#
你可以使用LINQ:
字符串
p8ekf7hl2#
RegEx似乎有点过头了:
字符串
mm5n2pyu3#
你也可以这样做(如果你想在.NET 1.0中工作的话:):
字符串
尽管如此简单的正则表达式可能工作正常
gblwokeq4#
使用LINQ!
字符串
f3temu5u5#
你的正则表达式只会找到ASCII大写字母。方便的是,.NET正则表达式引擎是Unicode感知的,使您能够
字符串
尽管我认为在您的情况下,您不希望字符串中包含非ASCII字母(考虑到其名称)。
iyzzxitl6#
使用 for 循环,它不像其他方法那样高效和可读,但对于初学者来说,它应该可以工作并提供一种全面的方法来做到这一点:
字符串
基本上,您迭代字符串并检查大写字符。然后,您可以添加关于如何处理大写字符的逻辑。例如,在找到第二个大写字符的地方插入一个空格,然后对整个字符串使用ToLower方法...
hc2pp10m7#
使用大型字符串时,使用LINQ可能会影响性能。您也可以使用ASCII级别的比较。
字符串
x8goxv8g8#
用途:
字符串