2 条回复
楼主思路很清晰,代码读起来很爽!
不知道你的代码是否通过了测试用例, 我在本地测试的时候123ASTParser时输出 _123AST_PARSER_,我认为正确的结果应该是 _123_AST_PARSER_
需要在代码中判断当前大写字母的前一个字母是否为数字,如果是数字需要在大写字母前加"_"
if (Character.isUpperCase(cs[i])) { if (Character.isLowerCase(cs[i - 1]) || Character.isDigit(cs[i - 1]) || (i + 1 < len && Character.isLowerCase(cs[i + 1]))) { res.append("_" + cs[i]); } else { res.append(cs[i]); } }
//算法是对了没问题的,但就是无法退出那个while(sc.hasNext())循环 求大神解答 import java.util.Scanner; public class 小米 { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner sc=new Scanner(System.in); StringBuffer sb=new StringBuffer(); int i,j; String str,temp; while(sc.hasNext()){ // temp=sc.nextLine(); // str=new String(temp); str=sc.nextLine(); str=str.replaceAll("[.]", "_"); String[]a=str.split("\\D"); if(a.length!=0){ for(i=0;i<a.length;i++) str=str.replaceFirst(a[i],"_"+a[i]+"_"); } String[]b=str.split("\\p{Upper}|\\d"); if(b.length!=0){ for(i=0;i<b.length;i++){ j=str.indexOf(b[i]); if(j!=0){ b[i]=str.charAt(j-1)+b[i]; } str=str.replaceFirst(b[i], "_"+b[i].toUpperCase()+"_"); } } str="_"+str+"_"; str=str.replaceAll("_+", "_"); sb.append(str+"\n"); } System.out.println(sb); } }
添加回复