我使用Visual Studio 2010 ver。
我有数组字符串[] = {“eat and go”};
我用foreach
显示它我想转换这样的字符串: EAT和GO
这是我的代码:
Console.Write( myString.First().ToString().ToUpper() + String.Join("",myString].Skip(1)).ToLower()+ "\n");
但输出结果是:吃饭然后去。:D lol
你可以帮帮我吗?我会很感激。感谢答案 0 :(得分:3)
虽然.ToUpper()
会将字符串转换为大写字母,但在字符串对象上调用.First()
实际上会返回字符串的第一个元素(因为它实际上是引擎盖下的char [])。 First()
实际上是作为LINQ扩展方法公开的,适用于任何集合类型。
与许多字符串处理函数一样,有许多方法可以处理它,这是我的方法。显然,你需要验证value
以确保给它一个足够长的字符串。
using System.Text;
public string CapitalizeFirstAndLast(string value)
{
string[] words = value.Split(' '); // break into individual words
StringBuilder result = new StringBuilder();
// Add the first word capitalized
result.Append(words[0].ToUpper());
// Add everything else
for (int i = 1; i < words.Length - 1; i++)
result.Append(words[i]);
// Add the last word capitalized
result.Append(words[words.Length - 1].ToUpper());
return result.ToString();
}
答案 1 :(得分:1)
如果它总是一个3个字string
,你就可以这样做:
string[] mystring = {"eat and go", "fast and slow"};
foreach (var s in mystring)
{
string[] toUpperLower = s.Split(' ');
Console.Write(toUpperLower.First().ToUpper() + " " + toUpperLower[1].ToLower() +" " + toUpperLower.Last().ToUpper());
}
答案 2 :(得分:0)
如果您想要连续候补,您可以执行以下操作:
private static string alternateCase( string phrase )
{
String[] words = phrase.split(" ");
StringBuilder builder = new StringBuilder();
//create a flag that keeps track of the case change
book upperToggle = true;
//loops through the words
for(into i = 0; i < words.length; i++)
{
if(upperToggle)
//converts to upper if flag is true
words[i] = words[i].ToUpper();
else
//converts to lower if flag is false
words[i] = words[i].ToLower();
upperToggle = !upperToggle;
//adds the words to the string builder
builder.append(words[i]);
}
//returns the new string
return builder.ToString();
}
答案 3 :(得分:0)
我将向您介绍一个解决您问题的简单方法。下面的代码在代码文件的开头需要以下指令:
using System;
using System.Linq;
您的代码的第一个问题是您的数组strings
不包含字符串;它包含只有一个字符串。因此,作为第一步,让我们将输入字符串拆分为空白并构建一个实际上每个单词包含一个项目的数组:
const string input = "eat and go";
string[] words = input.Split(' ');
接下来,在某些时候,我们需要确定一个单词是在偶数位还是奇数位。让我们定义一个通用辅助函数:
Func<int, bool> isEven = number => Math.Abs(number) % 2 == 0;
现在让我们做实际的工作:
string[] processedWords =
words
.Select((string word, int index) => isEven(index) ? word.ToUpper()
: word.ToLower())
.ToArray();
string output = string.Join(" ", processedWords); // put the words back together
这里最重要的部分是.Select(string,int)
LINQ operator:
通常,Select
从某个输入序列(此处为words
数组)生成新序列。传递给它的lambda函数为words
中的每个元素生成一个新值。
我们上面使用的Select
的特定重载不只是将每个输入项传递给lambda(word
),而且还传递给它在输入序列中的位置({{1 }})。我们可以使用该职位来决定是否应将输入index
的大小写更改为大写或小写。
最后,我们通过isEven
将其重新组合在一起(与我们在开头时使用的word
相反)。
答案 4 :(得分:0)
快速使用ScriptCS:
scriptcs (ctrl-c to exit)
> var input = "Eat and go";
> var words = input.Split(' ');
> var result = string.Join(" ", words.Select((s, i) => i % 2 == 0 ? s.ToUpperInvariant() : s.ToLowerInvariant()));
> result
"EAT and GO"