蓝桥杯算法训练 字符串变换 java

来源:互联网 发布:淘宝客推广计划怎么写 编辑:程序博客网 时间:2024/05/22 12:01

题目:

  算法训练 字符串变换  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了。今天,徐老师想测试一下大家对于字符串操作的掌握情况。徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串操作,你需要根据传入的参数,按照徐老师的规定,对输入字符串进行格式转化。
  徐老师指定的操作如下:
  1 表示全部转化为大写字母输出,如abC 变成 ABC
  2 表示全部转换为小写字母输出,如abC变成abc
  3 表示将字符串整个逆序输出,如 abc 变成 cba
  4 表示将字符串中对应的大写字母转换为小写字母,而将其中的小写字母转化为大写字母输出,如 abC变成ABc
  5表示将全部转换为小写字母,并将其中所有的连续子串转换为对应的缩写形式输出,比如abcD 转换为a-d,其次,-至少代表1个字母,既如果是ab,则不需要转换为缩写形式。
输入格式
  一共一行,分别是指代对应操作的数字和字符串,两者以空格分隔,字符串全部由英文字母组成
输出格式
  输出根据上述规则转换后对应的字符串
样例输入
5 ABcdEE
样例输出
a-ee
数据规模和约定
  输入字符串长度最长为200。
代码:

import java.util.Scanner;public class Main {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int num = sc.nextInt();String str = sc.next();StringBuilder strb = new StringBuilder(str);if(num == 1){System.out.println(str.toUpperCase());} else if(num == 2){System.out.println(str.toLowerCase());} else if(num == 3){StringBuffer sb = new StringBuffer(str);System.out.println(sb.reverse());} else if(num == 4){for(int i = 0;i < str.length();i++){if(Character.isLowerCase(str.charAt(i))){strb.setCharAt(i, Character.toUpperCase(str.charAt(i)));} else {strb.setCharAt(i, Character.toLowerCase(str.charAt(i)));}}System.out.println(strb);} else if(num == 5){str = str.toLowerCase();StringBuilder sb = new StringBuilder();for(int i = 0;i < str.length();i++){if(i == 0)sb = sb.append(str.charAt(0));else if(i != str.length() - 1){if((int)str.charAt(i) != (int)str.charAt(i - 1) + 1 || (int)str.charAt(i) != (int)str.charAt(i + 1) - 1){sb = sb.append(str.charAt(i));}else if(sb.charAt(sb.length() - 1) != '-'){sb = sb.append("-");}}else{sb = sb.append(str.charAt(i));}}System.out.println(sb);}}}
主要就是num==5的时候麻烦一点,先构造一个sb(StringBuilder)遍历字符串,

如果i==0,直接加上

如果i在0与结尾之间,如果与前后不连续直接加上,否则看一下sb的最后一位是不是'-',是就不用管了,接着循环,不是就加上'-'
如果循环到结尾,直接加上结尾就行了