【问题标题】:How to prepend a word with a letter if the first letter of that word is upper-case?如果单词的第一个字母是大写的,如何在单词前面加上一个字母?
【发布时间】:2014-12-04 20:34:12
【问题描述】:

如果我有这个String:

String paragraphWord = "This is A String of WoRDs";

这是我想要的结果:

k这是k一个Kk字串

所以我想在第一个字母是大写的每个单词之前添加 k。该怎么做?

这是我尝试过但没有成功的方法:

String paragraphWord = "This is A String of WoRDs";
String replacewords = string.Concat(paragraphWord.Select(c => char.IsUpper(c) ? "k" + c.ToString() : c.ToString())).TrimStart(); 

(不正确的)结果是:kThis is kA kString of kWokRkDs

【问题讨论】:

  • “我想要”不是问题。
  • 也许使用正则表达式?您似乎遗漏了您尝试过的部分。
  • string.Concat("String of Words".Select(x => Char.IsUpper(x) ? "I copied my homework" + x : x.ToString()));
  • 另外,您的示例中的R 发生了什么?它在您的输入中是大写的,但在您的输出中是小写的。
  • 为什么K 之前的String 是唯一的大写k

标签: c# string word uppercase


【解决方案1】:
String kWords = string.Join(" ", "This is A String of WoRDs"
    .Split()
    .Select(w => Char.IsUpper(w[0]) ? "k" + w : w));

【讨论】:

  • 我能问一下为什么你觉得问题这么糟糕吗?值得用勺子喂答案吗?我真的不认为我们应该传达我们为人们做家庭作业的信息。
  • @tnw:如果是家庭作业,我认为他不会使用 LINQ。没花那么多时间,也许对他或其他人有帮助。
  • 这是否有帮助是有争议的,因为我怀疑 OP 是否真的学会了 任何东西,如果他们甚至不需要思考或尝试,因为有人只是为他们做这件事......加上我仍然认为它鼓励帮助吸血鬼,这通常对社区不利。
  • 我对你没有经验。我是编程新手,感谢您的回答,但这不是我想要的。
  • @LorenaL:我仍然不明白我的方法有什么问题,因为它应该做你想做的事。我猜你忽略了我正在拆分每个单词,而不是你的 String.Concat 方法枚举每个字符而不是每个单词。
【解决方案2】:

使用正则表达式:

string paragraphWord = "This is A String of WoRDs";
var reg = new Regex(@"(?<=^|\W)([A-Z])");
Console.WriteLine(reg.Replace(paragraphWord,"k$1"));

解释(?&lt;=^|\W)([A-Z])

?<=     positive look behind
^|\W    start of the string or a whitespace character
[A-Z]   A single upper case letter

所以我们正在寻找一个以字符串开头或空格开头的单个大写字母。我们将该字符分组,以便我们可以在替换中使用它:

k$1

使用k 和匹配组$1 替换我们的匹配

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-12-11
    相关资源
    最近更新 更多