2016-07-08 99 views
0

我是新来的c#,我需要修剪一个有很多单词的句子。我只需要所有单词中的第一个字符。例如想要除去单词中第一个字符以外的所有字符

如果一个句子是这样的。

输入:Bharat Electrical Limited =>输出:BEL 如何在c#中完成此操作?

在此先感谢

+2

欢迎来到Stack Overflow和C#,你尝试了什么? –

+0

拆分空格,取第一个结果 – Jonesopolis

+0

我试着修剪字符串,它没有发生 –

回答

3

尝试

string sentence = "Bharat Electrical Limited"; 
var result = sentence.Split(' ').Aggregate("", (current, word) => current + word.Substring(0, 1)); 

编辑:这里有一个简短的explanantion:

sentence.Split(' ')拆分字符串划分为元素基于空间(”“)

.Aggregate("", (current, word) => current + word.Substring(0, 1));是linq表达式遍历每个单词,检索上面执行的操作,并且

word.Substring(0, 1)返回的每一个字要Split串入的话

+0

你应该解释你做了什么。即使它是短暂的。 –

+0

非常感谢你的工作,如预期的那样。 –

+0

@NaveenkumarR - 你可以把它标记为答案,如果它适合你。 – Yogi

1

第一件事的第一个字母,再从每个单词第一个字母。您可以通过一个简单的像下面的循环做到这一点:

string inputStr = "Bharat Electrical Limited"; 
List<char> firstChars = new List<char>(); 
foreach (string word in inputStr.Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries)) 
{ 
    firstChars.Add(word[0]); // Collecting first chars of each word 
} 
string outputStr = String.Join("", firstChars); 

,这将是这个短方式:

string inputStr = "Bharat Electrical Limited"; 
string shortWord = String.Join("", inputStr.Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries).Select(x => x[0])); 

如果每个字符串的第一个字符是不大写,那么你可以使用以下任何选项。

  1. 在执行操作之前,将输入转换为标题封装的句子。

为此,您可以使用下面的代码:

inputStr = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(inputStr.ToLower()); 
  • 转换的字符为大写,而我们从字收集人物,
  • 这可以通过以下方式实现:

    firstChars.Add(char.ToUpper(word[0])); // For the first case 
    .Select(x => char.ToUpper(x[0])) // For the second case 
    

    Here你可以找到一个工作示例上述所有情况下

    +0

    你可以使用'String.Concat'而不是'String.Join'。 –

    +0

    @ErenErsönmez:我认为'String.Join'比'Concatenation'好。因为'依靠内部的StringBuilder来构建连接的字符串',不是吗?那么你为什么建议使用'Concatenation'? –

    +0

    另外,为什么不简单地''选择(x => x [0] .ToUpper())'?而不是将整个字符串更改为标题大小写, – Jcl

    1

    你可以做这样的事情 -

    string sentence = "Bharat Electrical Limited"; 
    
    //Split the words 
    var letters = sentence.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries); 
    
    //Take firsst letter of every word 
    var myAbbWord = letters.Aggregate(string.Empty, (current, letter) => current + letter.First()); 
    

    myAbbWord应显示BEL你。

    1

    以下是解决方案。

    我希望它有帮助。

    string str1 = "Bharat Electrical Limited"; 
    var resultList = str1.Split(' '); 
    string result = resultList.Aggregate(String.Empty, (current, word) => current + word.First()); 
    
    0

    简单的方法是:

    string inputStr = "Bharat Electrical Limited"; 
    
    string result = new String(inputStr.Split(' ').Select(word => (word[0])).ToArray()); 
    // BEL 
    

    您需要添加using System.Linq;到您的源文件。

    逻辑是:

    拆分串入阵列或字(由空格分隔),然后项目此数组通过选择每个字符串的第一个字符。结果是第一个字符的数组。然后使用字符串重载构造函数取char数组,构造结果字符串。

    1

    这是何许件事是很容易用正则表达式来实现:

    s = Regex.Replace(s, @"(\S)\S*\s*", "$1"); 
    

    这有效地匹配连续的非空格字符,后跟空格,并取代它的第一个字符的整个序列。

    +0

    哇,在群中脱颖而出。 :) –

    0

    这可能看起来更对你友好

    string intput = "Bharat Electrical Limited"; 
    string output = string.Join("",intput.Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries) 
           .Select(a => a.First())); 
    

    先拆你的输入sentense与空间,然后在string使用First()扩展来获得字符串的第一个字符

    0

    使用此方法

    string inputStr = "Bharat Electrical Limited"; 
        var arrayString = string.Join("", inputStr.Split(' ').Select(x => x[0])); 
    
    相关问题