2011-03-11 51 views
3

如何使用C#从字符串中单独检查/过滤大写单词? 我不想使用“Char.IsUpper()”循环查看单词的每个字母以检查大写字母是否相同。 有没有什么办法很简单的代码来完成这项任务?与LINQ等?如何使用C#从字符串中单独检查/过滤大写单词?

+0

string str =“iAMsuKUMAR”;而你想要string answer =“AMKUMAR”??喜欢这个 ? – 2011-03-11 07:34:05

+0

@Sangram - 我很确定他想要整个大写字,但从问题来看并不明显。 – 2011-03-11 07:36:12

+0

@ØyvindKnobloch-Bråthen:yeh..u正确....他希望我们能猜到所有的东西:-) – 2011-03-11 07:51:50

回答

7

这是怎么回事?

string test = "This IS a STRING"; 
var upperCaseWords = test.Split(' ').Where(w => w == w.ToUpper()); 

upperCaseWords现在包含字符串中的所有大写单词。

+1

@Downvoter - 照顾评论? – 2011-03-11 08:37:48

+0

你能解释我的“.Where(w => w == w.ToUpper());”?为什么要这样使用,如果我尝试你的代码显示错误“System.Linq.Enumerable + WhereArrayIterator'1 [System.String]”。请帮助我.. – 2012-01-09 12:02:27

+0

王子安东尼G - 如果你试图只是''upperCaseWords.ToString()',它会给这个结果作为'System.Linq.Enumerable + WhereArrayIterator'1 [System.String]'的类型'upperCaseWords',但这不是一个错误。你为什么认为这是?尝试以下操作以获取相应的单词(如果这是一个控制台应用程序,例如'foreach(upperCaseWords中的字符串s){Console.WriteLines(s);}',这将在单独的行中写入大写单词。 – 2012-01-09 12:10:03

0

您的意思是:String.ToUpper()

编辑:好吧,对不起,我误解了这个问题。

+0

编号我想检查/过滤使用C#的字符串大写单词。 – venkat 2011-03-11 07:33:41

0

你想只是一个字符串中的大写单词,是吧?

也许这样?

var upperCaseWords = from w in Regex.Split(text, @"\s+") 
        where char.IsUpper(w[0]) 
        select w; 

如果您希望在所有大写字母(像这样)的话,你可以用基本相同的方法,只是用不同的谓词:

var upperCaseWords = from w in Regex.Split(text, @"\s+") 
        where w.All(c => char.IsUpper(c)) 
        select w; 
+0

这只是给出以大写字母开头的单词 – Cameron 2011-03-11 07:36:53

+0

@Cameron:这就是我认为OP所指的“大写单词”;从其他回答来看,我是这个解释的少数派。 – 2011-03-11 07:39:44

+0

不断猜测他的意思!!!! – 2011-03-11 07:53:45

0

您可以使用正则表达式做到这一点: http://oreilly.com/windows/archive/csharp-regular-expressions.html

寻找到最初的字母是大写的所有单词

string t17 = "This is A Test of Initial Caps"; 
string p17 = @"(\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b)"; 
MatchCollection mc17 = Regex.Matches(t17, p17); 

查找全部大写单词

string t15 = "This IS a Test OF ALL Caps"; 
string p15 = @"(\b[^\Wa-z0-9_]+\b)"; 
MatchCollection mc15 = Regex.Matches(t15, p15); 
1

你可以使用正则表达式:

using System.Text.RegularExpressions; 

string input = "hello hi HELLO hi HI"; 
MatchCollection matches = Regex.Matches(" " + input + " ", @" [A-Z]* "); 
foreach (Match m in matches) 
{ 
    MessageBox.Show(m.Value); 
} 

编辑:为了处理在第一/最后一个字都是大写的情况下,你可以只添加一个空格,以每一面的输入字符串。我已经更新了上面的例子。

1

使用序号字符串比较可以加快比较速度:unicode,每个字节的字节数,不包含区域性检查。

// the TEST string 
var result = input 
    .Split(' ') 
    .Where(w => String.Equals(w, w.ToUpper(), StringComparison.Ordinal)); 
// TEST 
相关问题