提问人:masha 提问时间:11/15/2023 最后编辑:Dmitry Bychenkomasha 更新时间:11/17/2023 访问量:91
将所有首字母设为大写,但最多 3 个字符的单词除外
Make all the first letters uppercase except for words with at max 3 characters
问:
我有一个文本文件,用户可以使用许多字符串进行编辑,我希望所有首字母都大写,除了 <= 3 个字符的单词必须全部大写。
使用LINQPAD我像这样读取txt文件
var textFile = File.ReadAllText(@"C:\...\...\...\...\uppercase.txt");
文件示例:
笔在桌子上
猫不在
桌子上 ChiLDreN 在蹦床上
想要的输出:
笔在桌子上
猫在桌子
下 孩子们在蹦床上
答:
1赞
Tim Schmelter
11/15/2023
#1
您可以使用以下方法:
var newWords = textFile.Split(' ')
.Select(w => w.Length <= 3 ? w.ToUpper() : char.ToUpper(w[0]) + w[1..].ToLower());
textFile = String.Join(" ", newWords);
1赞
Dmitry Bychenko
11/15/2023
#2
鉴于:text
string text =
@"THE PEN IS ON THE TABLE
The cat is UNder ThE Table
The ChiLDreN Are ON The trampoline";
我们可以使用正则表达式来做替换:
using System.Text.RegularExpressions;
using System.Globalization;
...
string result = Regex.Replace(text,
@"\p{L}+",
match => match.Value.Length > 3
? CultureInfo.CurrentCulture.TextInfo.ToTitleCase(match.Value)
: match.Value.ToUpper());
在这里,我将其视为非空的字母序列。请注意,正则表达式与拆分尊重标点符号不同:word
\p{L}+
"The cat! Not a dog" -> "THE CAT! NOT A DOG"
1赞
Hr.Panahi
11/15/2023
#3
这是我是如何做到的:
string txt = "THE PEN IS ON THE TABLE\nThe cat is UNder ThE Table\nThe ChiLDreN Are ON The trampoline";
var lines = txt.Split('\n');
我先分手,然后:txt
\n
foreach (var line in lines)
{
var words = line.Split(' ');
foreach (var word in words)
{
if (word.Length <= 3)
{
Console.Write(word.ToUpper() + " ");
}
else
{
Console.Write(word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower() + " ");
}
}
Console.WriteLine();
}
然后,我使用 foreach 循环遍历数组以获取其中的每个元素并用 .lines
Split(' ')
然后,我使用另一个 foreach 循环来遍历每个元素,以获取其中的每个单词并进行大写和打印。words
我是 C# 的新手,只是想提供帮助,因为我尝试了这种方法并且它奏效了。
评论
if (word.Length <= 3) { return word.ToUpper(); } else { return char.ToUpper(word[0]) + word.Substring(1).ToLower(); }