HR-驼峰命名的拆分组合

说明

CamelCase是许多编程语言中常见的一种命名风格。在Java中,方法和变量名通常以小写字母开头,所有后续单词以大写字母开头(例如:startThread)。类的名称遵循相同的模式,只是它们以大写字母开头(例如:BlueCar)。

编写一个程序,创建或拆分CamelCase变量、方法和类名。

输入格式

输入的每一行都将以一个操作(S或C)开头,然后是一个分号,然后是M、C或V,然后是分号,然后是您需要操作的单词。
操作将是S(拆分)或C(合并); M表示方法,C表示类,V表示变量

拆分操作:

字符串将是一个驼峰命名的方法、类或变量名,您需要将其拆分为以小写字母开头的以空格分隔的单词列表。

组合操作:

字符串将是一个以小写字母开头的空格分隔的单词列表,您需要将这些单词组合成适当的以驼峰命名字符串。方法应以一组空括号结尾,以将它们与变量名区分开来。

输出格式

对于每个输入行,打印出以空格分隔的单词列表(拆分操作)或适当的驼峰命名字符串(组合操作)。

输入举例

S;M;plasticCup()
C;V;mobile phone
C;C;coffee machine
S;C;LargeSoftwareBook
C;M;white sheet of paper
S;V;pictureFrame

输出举例

plastic cup
mobilePhone
CoffeeMachine
large software book
whiteSheetOfPaper()
picture frame

C#实现程序

点击查看代码
                var dic = new List<string>{"S;M;", "S;C;", "S;V;", "C;M;", "C;C;", "C;V;"};
                var inpt = Console.ReadLine().Trim();
                if(string.IsNullOrWhiteSpace(inpt) && !dic.Any(e => inpt.StartsWith(e))){
                    Console.WriteLine($"invalid input{inpt}");
                    return;
                }
                var names = string.Join("", inpt.Skip(4).ToArray());
                if(string.IsNullOrWhiteSpace(names)){
                    Console.WriteLine($"invalid input: empty names");
                    return;    
                }
                var result = new StringBuilder(names.Length);
                if(inpt.StartsWith("S;")){
                    names = names.Replace("()", string.Empty);
                    /*
                    for(var i = 0; i< names.Length -1; i++){
                        result.Append(names[i]);
                        if (char.IsUpper(names[i+1])){
                            result.Append(" ");
                        }
                    }
                    result.Append(names[names.Length-1]);
                    Console.WriteLine(result.ToString().ToLower());
                    */
                    var spliter =  Regex.Split(names, @"(?<!^)(?=[A-Z])");
                    Console.WriteLine(string.Join(" ", spliter).ToLower());
                }
                
                result.Clear();
                if(inpt.StartsWith("C;")){
                    var arr = names.Split(' ');
                    var first = arr[0];
                    if(inpt.StartsWith("C;C;")){
                        var farr = arr[0].ToCharArray();
                        farr[0] = char.ToUpper(farr[0]); 
                        first = new string(farr);
                    }
                    result.Append(first);
                    for(var i = 1; i < arr.Length; i++){
                        var item = arr[i].ToCharArray();
                        item[0] = char.ToUpper(item[0]); 
                        result.Append(item);
                    }

                    if(inpt.StartsWith("C;M;")){
                        result.Append("()");
                    }

                    Console.WriteLine(result.ToString());
                }

另附正则表达式

?= 会寻找匹配位置右侧包含匹配项的匹配内容

exp1(?=exp2):查找exp1后面是exp2的exp1。

?<= 会寻找匹配位置左侧包含匹配项的匹配内容

(?<=exp2)exp1:查找exp1前面是exp2的exp1。

?! 会排除匹配位置右侧匹配到的项

exp1(?!exp2):查找后面不是exp2的exp1。

?<! 会排除匹配位置左侧匹配到的项

(?<!exp2)exp1:查找exp1前面不是exp2的exp1。

posted @ 2023-06-27 13:23  Cyber9527  阅读(16)  评论(0编辑  收藏  举报