当前位置: 首页 > news >正文

L1-7 统一命名规范(java)

你所在的公司刚刚招收了几位程序员,然而这些程序员之前在不同的公司工作,所以他们习惯的变量命名规范可能存在差异,需要让他们都习惯公司要求的命名规范,然而这样可能会降低他们的工作效率。

你的上司找到了你,希望你能编写统一命名规范的程序,确保效率不降低的前提下,统一项目变量的命名规范。

现在已经知道公司中只会存在以下三种命名规范:

  • 驼峰(Camel),单词之间没有分隔符,第一个单词首字母小写,其余单词首字母大写,其余字母小写,例如 userName
  • 帕斯卡(Pascal),单词之间没有分隔符,所有单词首字母大写,其余字母小写,例如 UserName ;
  • 下划线(Snake),单词之间用下划线 _ 分隔,所有字母小写,例如 user_name 。

输入格式:

第一行输入一个整数 N(1≤N≤100) 和一个字符串 T ,分别表示变量名的数量和最后统一的命名规范,其中命名规范只存在 CamelPascalSnake 三种。

接下来 N 行每行输入一个只包含大小写字母和下划线的字符串 Si​(1≤∣Si​∣≤50) ,表示第 i 个变量名,命名方式为 CamelPascalSnake 中的一种。

输出格式:

每一行输出一个字符串,表示第 i 个变量统一成命名规范 T 后的变量名。

输入样例:

4 Snake
userName
Password
background_color
text

输出样例:

user_name
password
background_color
text

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

代码示例:

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        String type = reader.next();
        for(int i=0;i<n;i++){
            String s = reader.next();
            List<String> words = toWords(s);
            System.out.println(toLines(words,type));
        }
    }
    private static List<String> toWords(String s) {
        List<String> words = new ArrayList<>();
        if(s.contains("_")){
            String[] split = s.split("_");
            words.addAll(Arrays.asList(split));
        } else {
            if(!s.isEmpty()){
                int index = 0;
                for(int i=1; i<s.length(); i++){
                    if(Character.isUpperCase(s.charAt(i))){
                        words.add(s.substring(index,i));
                        index = i;
                    }
                }
                words.add(s.substring(index));
            }
        }
        return words;
    }
    private static String toLines(List<String> words,String type) {
        StringBuilder s = new StringBuilder();
        switch (type) {
            case "Snake" -> {
                for (int i = 0; i < words.size(); i++) {
                    if (i >= 1) {
                        s.append("_");
                    }
                    s.append(words.get(i).toLowerCase());
                }
            } case "Camel" -> {
                s.append(words.get(0).toLowerCase());
                for (int i = 1; i < words.size(); i++) {
                    s.append(Character.toUpperCase(words.get(i).charAt(0)));
                    s.append(words.get(i).substring(1).toLowerCase());
                }
            }
            case "Pascal" -> {
                for (String word : words) {
                    s.append(Character.toUpperCase(word.charAt(0)));
                    s.append(word.substring(1).toLowerCase());
                }
            }
        }
        return s.toString();
    }
}

相关文章:

  • C 语 言 --- 二 维 数 组 的 应 用
  • 【Python 语法】排序算法
  • redis部署架构
  • Linux书签上下移动
  • Git LFS (Large File Storage) 简介
  • redis主从搭建
  • 79.HarmonyOS NEXT 手势操作模型详解:移动、缩放与旋转的实现原理
  • 1216走迷宫
  • OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验
  • 接口自动化测试用例
  • 电路基础【2】:三极管基础:PNP与NPN三极管详解
  • 微服务》》四个问题
  • HTTP相关问题(AI回答)
  • 【Linux-传输层协议TCP】流量控制+滑动窗口+拥塞控制+延迟应答+捎带应答+面向字节流+粘包问题+TCP异常情况+TCP小结
  • 谷歌Gemini 3大模型发布,AI领域再掀波澜!
  • 数据结构与算法-图论-欧拉路径和欧拉回路(有向图和无向图,骑马修栅栏,单词游戏 play on words)详细代码注解
  • 【精华】学校机房电脑摆脱网络控制
  • Spring Security vs Shiro vs Sa-Token
  • ESP-IDF中FreeRTOS的三种任务调度算法
  • C语言中的指针与函数
  • 上海文化馆服务宣传周启动,为市民提供近2000项活动
  • 上影节公布今年IMAX片单:暗涌、重生与感官的史诗
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 在美国,为什么夏季出生的孩子更容易得流感?
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题
  • 中国物流集团等10家央企11名领导人员职务任免