首页 > 其他分享 >HR-驼峰命名的拆分组合

HR-驼峰命名的拆分组合

时间:2023-06-27 13:34:39浏览次数:31  
标签:驼峰 HR exp1 names 拆分 var inpt result

说明

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。

标签:驼峰,HR,exp1,names,拆分,var,inpt,result
From: https://www.cnblogs.com/RocCnBlog/p/17508596.html

相关文章

  • tqt507 pthread 多线程测试 atomic 原子操作
    ////tqt057测试结果find/opt-name*atomic.h*//aarch64-linux-gnu-gccdemoatomic.c-odemoatomic-pthread-I/opt/EmbedSky/TQT507/CoreA/longan/kernel/linux-4.9/tools/include//cp./demoatomic/home/book/nfs_rootfs#include<linux/atomic.h>#inclu......
  • Three.js教程:gui调试界面2
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生gui调试界面2-颜色命名等本节课结合threejs,给大家介绍gui.js库更多的方法。.name()方法.add()创建的交互界面,会默认显示所改变属性的名字,为了通过交互界面更好理解你改变的某个对象属性,你可以通过.name()方......
  • 基于Java+selenium+Chrome,实现截取html页面内容并保存为图片
    1、需求实现Java程序发送邮件,并将输入的多个页面转为pdf类型附件一同发送出去。而页面如何转为pdf呢?其中的一个方案就是先将html页面转为图片,再将图片合并为pdf。此文记录的是html=>png过程。2、开发主要依赖<!--html2image--><dependency><groupId>org.seleniumhq.se......
  • mockito5.4.0单元测试(11) --do when家族的方法们:doReturn()|doThrow()| doAnswer()|
    mockito官方文档地址:https://www.javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#do_family_methods_stubs//mock一个对象HashMapmockMap=mock(HashMap.class);  doCallRealMethod方法示例://当mock对象调用put和size方法时,都调用真实的方......
  • Three.js教程:gui.js库(可视化改变三维场景)
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生gui.js库(可视化改变三维场景)gui.js库(可视化改变三维场景)dat.gui.js说白了就是一个前端js库,对HTML、CSS和JavaScript进行了封装,学习开发的时候,借助dat.gui.js可以快速创建控制三维场景的UI交互界面,你打开......
  • 目标字符串驼峰化处理
    功能函数的设计初衷是将目标字符串驼峰化的api:比如CSS样式特性与JavaScipt样式属性的切换  background-color与style.backgroundColorfont-weight与fontWeightfont-family与fontFamily  ~~~~~~~~~~~~~~  /**toCamelCase--将目标字符串进行驼峰化处理**@func......
  • Chrome/Edge 浏览器多账号登录,测试同一业务系统的不同账号角色
    虽然说用不同浏览器测试也比较方便、还能顺带测试多浏览器兼容问题……但我是开发呀,我只想用我最习惯的谷歌浏览器完成快速开发,把功能铺上,专注于业务逻辑的开发这些浏览器差异等只会给我造成麻烦,影响我的开发沉浸感,打乱我的开发节奏,等功能开发完再去处理再去测试兼容性之类的问......
  • 如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari)
    如何清除浏览器的DNS缓存(Chrome,Firefox,Safari)ChromeChromiumEdgeFirefoxSafariclearDNSCache,flushDNScache请访问原文链接:https://sysin.org/blog/clear-browser-dns-cache/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org天下只剩三种(主流)浏览......
  • Chrome Edge Firefox Safari 如何清除 DNS 缓存
    ChromeEdgeFirefoxSafari如何清除DNS缓存如何清除浏览器的DNS缓存(Chrome,Firefox,Safari)ChromeChromiumEdgeFirefoxSafariclearDNSCache,flushDNScache请访问原文链接:https://sysin.org/blog/clear-browser-dns-cache/,查看最新版。原创作品,转载请保留出......
  • cpp condition_variable wait_for unique_mutex,chrono::seconds
    #include<chrono>#include<condition_variable>#include<ctime>#include<fstream>#include<future>#include<iomanip>#include<iostream>#include<thread>#include<uuid/uuid.h>#include<vector......