如何将char [item]添加到字符串?

时间:2016-06-06 06:22:08

标签: c#

我尝试使用List和数组Char []但不能添加它。在这种情况下,我尝试添加result变量。

我想返回字符串result

char[] array = valuesNew.ToCharArray();
string result = "";
for (int i = 1; i < array.Length; i++)
{
    if (array[i - 1] == ' ')
    {
            array[i] = char.ToUpper(array[i]);
            result += array[i];
    }
}
return new string(result);

但错误如:

  

无法将字符串转换为char。

在线:

return new string(result);

5 个答案:

答案 0 :(得分:4)

如果您只需要每个单词的第一个字母(使用空格作为分隔符),请执行以下操作:

private static string FirstLetters(string text)
{
    string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    return new string(words.Select(x => Char.ToUpper(x[0])).ToArray());
}

static void Main(string[] args)
{
    Console.WriteLine(FirstLetters("This is a sentence.")); // Prints "TIAS"
    Console.WriteLine(FirstLetters("To dO someThing in HomEWork")); // Prints "TDSIH"
    Console.ReadKey();
}

如果出于某种原因你不想使用Linq,你可以这样做(如果彼此相邻有多个空格,那么工作正常):

private static string FirstLetters(string text)
{
    string result = string.Empty;
    for (int i = 0; i < text.Length - 1; i++)
    {
        if (text[i] == ' ')
            result += Char.ToUpper(text[i + 1]);
    }

    return result;
}

答案 1 :(得分:2)

错误似乎在以下行 -

return new string(result);

因为result的类型为string,但new string..采用了char数组。

但无论如何,当你返回字符串时,你可以直接返回result

编辑:根据您的意见,这应该适合您 -

        string valuesNew = "To dO someThing in HomEWork";
        char[] array = valuesNew.ToCharArray();
        string result = array[0].ToString();
        for (int i = 1; i < array.Length; i++)
        {
            if (array[i - 1] == ' ')
            {
                array[i] = char.ToUpper(array[i]);
                result += array[i];
            }
        }

        return result;

输出为TDSIH

答案 2 :(得分:1)

如果我查看问题,数组总是小于您需要返回的字符串。字符串基本上是一系列具有某些功能的字符......那么为什么不简单地修改所有内容并从char[]创建一个?像StringBuilder这样的工具也是一种选择,但它们需要分配,重新分配等 - 在这种情况下这是不必要的。

这是我想出的......不确定它是不是你的意思,但它确实类似于你的问题。

static void Main(string[] args)
{
    char[] array = " This is  a sentence.".ToCharArray();
    int dst = 0;

    if (array[0] != ' ' && char.IsLetter(array[0]))
    {
        array[dst++] = char.ToUpper(array[0]);
    }
    for (int i = 1; i < array.Length; i++)
    {
        if (array[i - 1] == ' ' && char.IsLetter(array[i]))
        {
            array[dst++] = char.ToUpper(array[i]);
        }
    }
    string result = new string(array, 0, dst);

    Console.WriteLine(result);
    Console.ReadLine();
}

那么,为什么这种做法?

  • OP对字符感兴趣,而不是数字和其他东西。这很容易检查循环,特别是如果你想要处理更复杂的东西(f.ex。&#39;#@ foo123&#39; - 如果我们想要添加一个&#39; F& #39;在这里,这很容易实现)
  • 使用+=向字符串添加字符意味着我们必须分配字符串,复制旧字符串,添加字符并丢弃旧字符串。这是在一周中的任何一天打破表现的简单方法。 StringBuilder更好......但如果我们已经知道我们想要拥有什么,为什么要使用这样的东西。

答案 3 :(得分:0)

如果我理解你的查询,你正在寻找这样的东西:

using System.Globalization;
...
...
...
public string CapitalizeEveryWordInMyString(string input)
{
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input);
}

答案 4 :(得分:-1)

尝试以下代码。您可以接受参数作为输入

仍然不清楚你的要求,因为你说你想要第一个带空格的角色。

{{1}}