如何在一组特定字符中的每一个之后将字母变为大写

Posted

技术标签:

【中文标题】如何在一组特定字符中的每一个之后将字母变为大写【英文标题】:How do I make letters to uppercase after each of a set of specific characters 【发布时间】:2013-06-15 17:11:17 【问题描述】:

我有一个字符集合(',', '.', '/', '-', ' ')然后我有一个字符串集合(大约 500 个)。

我想要尽快做的是:在每个字符之后,我想让下一个字母大写。

我也希望第一个大写,并且许多字符串都以大写开头。

编辑: 我修改了 tdragons 对这个最终结果的回答:

    public static String CapitalizeAndStuff(string startingString)
    
        startingString = startingString.ToLower();
        char[] chars = new[]  '-', ',', '/', ' ', '.';
        StringBuilder result = new StringBuilder(startingString.Length);
        bool makeUpper = true;
        foreach (var c in startingString)
        
            if (makeUpper)
            
                result.Append(Char.ToUpper(c));
                makeUpper = false;
            
            else
            
                result.Append(c);
            
            if (chars.Contains(c))
            
                makeUpper = true;
            
        
        return result.ToString();
    

然后我为我所有的字符串调用这个方法。

【问题讨论】:

【参考方案1】:

您可以多次对整个字符串进行字符串拆分,每个元素一次,冲洗并重复,然后将每个块大写。

char[] tempChar = ',','-';
List<string> tempList = new List();
tempList.Add(yourstring);
foreach(var currentChar in tempChar)

  List<string> tempSecondList = new List();
  foreach(var tempString in tempList)
  
    foreach(var tempSecondString in tempString.split(currentchar))
    
      tempSecondList.Add(tempSecondString);
    
  
  tempList = tempSecondList;

无论如何,我希望我的计数是正确的,然后将 tempList 中的每个条目都设置为上

【讨论】:

【参考方案2】:

或者您可以使用简单的正则表达式:

var result = Regex.Replace(str, @"([.,-][a-z]|\b[a-z])", m => m.Value.ToUpper());

【讨论】:

【参考方案3】:
        char[] chars = new char[]  ',', '.', '/', '-', ' ' ;
        string input = "Foo bar bar foo, foo, bar,foo-bar.bar_foo zz-";
        string result = input[0] + new string(input.Skip(1).Select((c, i) => 
                  chars.Contains(input[i]) ? char.ToUpper(input[i + 1]) : input[i + 1]
             ).ToArray());
        Console.WriteLine(result);

【讨论】:

【参考方案4】:
public static string Capitalise(string text, string targets, CultureInfo culture)

    bool capitalise = true;
    var result = new StringBuilder(text.Length);

    foreach (char c in text)
    
        if (capitalise)
        
            result.Append(char.ToUpper(c, culture));
            capitalise = false;
        
        else
        
            if (targets.Contains(c))
                capitalise = true;

            result.Append(c);
        
    

    return result.ToString();

像这样使用它:

string targets = ",./- ";
string text = "one,two.three/four-five six";

Console.WriteLine(Capitalise(text, targets, CultureInfo.InvariantCulture));

【讨论】:

【参考方案5】:
string a = "fef-aw-fase-fes-fes,fes-,fse--sgr";
char[] chars = new[]  '-', ',' ;
StringBuilder result = new StringBuilder(a.Length);
bool makeUpper = true;
foreach (var c in a)

    if (makeUpper)
    
        result.Append(Char.ToUpper(c));
        makeUpper = false;
    
    else
    
        result.Append(c);
    
    if (chars.Contains(c))
    
        makeUpper = true;
    

【讨论】:

以上是关于如何在一组特定字符中的每一个之后将字母变为大写的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将字符串的每三个字母大写?

如何使用Java将字符串中的第一个字母大写?

NSString 中的大写首字母

python如何让给定字符串“abcdefg”中的3个字符变成大写并输出所有的可能?

如何使用正则表达式,将字符串中的每个单词首字母大写

C语言截取字符串将大写字母转换为小写字母。