驼峰命名转化

import java.util.Scanner;

public class Main {

    public static String change(String s){
        //结果字符串
        StringBuilder sb=new StringBuilder();
        //小写就直接append
        //遇到大写就继续往后判断一直到最后一个连续的大写为止 然后插入_小写_
        //只有一个大写直接 append _小写注意是不是第一个字符
        for(int i=0;i<s.length();++i)
        {
            StringBuilder temp=new StringBuilder();
            if(Character.isLowerCase(s.charAt(i)))
            {
                sb.append(s.charAt(i));
            }
            //当前字母是大写后一个字母存在
            else if(Character.isUpperCase(s.charAt(i))&&(i+1<=s.length()-1))
            {
                //如果后一个字母是小写 直接添加
                if(Character.isLowerCase(s.charAt(i+1)))
                {
                    //第一个大写字母前面不要加_
                    if(i!=0)
                    {
                        sb.append("_").append(Character.toLowerCase(s.charAt(i)));
                    }
                    else{
                        sb.append(Character.toLowerCase(s.charAt(i)));
                    }
                }
                //找到最后一个连续的大写字母的位置
                else
                {
                    //进入循环判断 只要是大写i++
                    while(Character.isUpperCase(s.charAt(i)))
                    {
                        temp.append(Character.toLowerCase(s.charAt(i)));
                        i++;
                    }

                    //(start,i-1)都是大写
                    sb.append("_").append(temp.toString()).append("_");
                    sb.append(s.charAt(i));
                }
            }
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        while(true)
        {
            Scanner scanner=new Scanner(System.in);
            System.out.println(change(scanner.next()));
        }


    }
}

你可能感兴趣的:(java)