例:
string str = "I am going to reverse myself.";
string strrev = "I ma gniog ot esrever .flesym"; //An easy way to achieve this
Run Code Online (Sandbox Code Playgroud)
因为我认为我必须遍历每个单词然后每个单词的每个字母.
我做的很好.但我需要轻松/简短的方式.
C#代码:
string str = "I am going to reverse myself.";
string strrev = "";
foreach (var word in str.Split(' '))
{
string temp = "";
foreach (var ch in word.ToCharArray())
{
temp = ch + temp;
}
strrev = strrev + temp + "";
}
Console.WriteLine(strrev); //I ma gniog ot esrever .flesym
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 16
那么,这是一个LINQ解决方案:
var reversedWords = string.Join(" ",
str.Split(' ')
.Select(x => new String(x.Reverse().ToArray())));
Run Code Online (Sandbox Code Playgroud)
如果您使用的是.NET 3.5,则还需要将反转序列转换为数组:
var reversedWords = string.Join(" ",
str.Split(' ')
.Select(x => new String(x.Reverse().ToArray()))
.ToArray());
Run Code Online (Sandbox Code Playgroud)
换一种说法:
string(char[])构造函数来创建一个新单词ToArray()字符串序列,因为.NET 4有更多可用的重载string.Join结果将反转的单词重新组合在一起.请注意,这种反转字符串的方式有点麻烦.创建扩展方法很容易:
// Don't just call it Reverse as otherwise it conflicts with the LINQ version.
public static string ReverseText(this string text)
{
char[] chars = text.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这仍然是各种各样的"错误" - 它不能处理组合字符,代理对等.它只是反转原始字符串中的UTF-16代码单元序列.很好玩,但你需要理解为什么将它用于真实数据不是一个好主意.
要反转我使用的字符串:
new String( word.Reverse().ToArray() )
Run Code Online (Sandbox Code Playgroud)
该Reverse()函数是LINQ的一部分,因为String实现了IEnumerable<char>.其结果是另一个IEnumerable<char>现在需要转换为字符串.你可以通过调用ToArray()哪个给出一个char[]然后将它传递给构造函数来做到这一点string.
所以完整的代码变成:
string s="AB CD";
string reversed = String.Join(" ",
s.Split(' ')
.Select(word => new String( word.Reverse().ToArray() ) ));
Run Code Online (Sandbox Code Playgroud)
请注意,此代码不适用于某些unicode功能.它至少有两个问题:
char当UTF-16编码时,基本平面外的Unicode字符需要两个s.反转它们会破坏编码.这是相对容易修复的,因为只有有限数量的字符启动这样的序列(如果我没记错的话,则为16),这很可能在将来的unicode版本中不会扩展.| 归档时间: |
|
| 查看次数: |
33425 次 |
| 最近记录: |