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

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();
    }
}


http://www.kler.cn/a/587471.html

相关文章:

  • 【ESP32】ESP-IDF开发 | 经典蓝牙开发 | 蓝牙串口协议(SPP) + 客户端和服务端例程
  • MyBatis框架操作数据库一>xml和动态Sql
  • 基于单片机的豆浆机控制系统设计(论文+源码)
  • 软件环境安装-通过Docker安装RocketMQ
  • 安卓实现魔改版 Base64 算法
  • 什么是机器学习?从零基础到自动驾驶案例全解析
  • 阿里FPGA XCKU3P开箱
  • 国内Mac,nimi安装homebrew完整过程
  • Rust从入门到实战
  • 【Go每日一练】实现简单的控制台计算器
  • 简单的bug+1
  • 现代密码学 | 具有保密和认证功能的安全方案
  • 软考网络安全专业
  • 基于大模型预测的难治性青光眼诊疗方案研究报告
  • Leetcode:34(二分查找)
  • Android(java)高版本 DownloadManager 封装工具类,支持 APK 断点续传与自动安装
  • C#结构体(Struct)详解
  • 学习MDA规范_9.CORBA(公共对象请求代理架构)‌
  • 「自动驾驶背后的数学:从传感器数据到控制指令的函数嵌套」—— 揭秘人工智能中的线性函数、ReLU 与复合函数
  • PostgreSQL数据库版本支持策略