字符串扩展
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符'-'简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符'-'来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要被解决了。给你一个含有扩展符'-'的字符串,你的任务就是将他还原成原来的字符串。要求是只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字时并且扩展符前面的字符不大于后面的字符才进行扩展,其它情况不进行扩展,原样输出。例如:a-R、D-e、0-b、4-B等字符串都不进行扩展。
Input
第一行是一个正整数T,表示共有T组测试数据(T < 100)。下面的T行,每一行包括一个长度不大于1000的待扩展字符串.
Output
每组测试数据输出一行扩展后的字符串。
Example Input
3 ADEa-g-m02 acm-0-5-a-ac-cm-m-A-AC-CM-M Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z
Example Output
ADEabcdefghijklm02 acm-012345-aaccmm-AACCMM Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt();//t组数据 while( t-->=0 ){ String s = in.next();//输入字符串 String newS = expand(s);//调用扩展函数 System.out.println(newS);//输出 } in.close(); } public static String expand( String s ){ StringBuffer ss = new StringBuffer();//StringBuffer的使用http://www.jb51.net/article/47135.htm char []a = s.toCharArray();//字符数组 for( int i=0; i<a.length; i++ ){ ss.append(a[i]);//赋值,把值赋给ss if( a[i]=='-' && i>0 && i<a.length-1 ){//遇到连接符且不是第一个或最后一个位置 if( a[i-1]<=a[i+1] ){ //如果左侧不大于右侧 if( ( a[i-1]>='a' && a[i+1]<='z' ) ||//如果左右都属于小写 ( a[i-1]>='A' && a[i+1]<='Z' ) ||//都属于大写 ( a[i-1]>='0' && a[i+1]<='9' ) ){//都属于数字 ss.deleteCharAt( ss.length()-1 );//去掉连字符 char x = a[i-1];//用x代表左侧的字符 for( int k=0; k<a[i+1]-a[i-1]-1; k++ ){//连字符之间省略的字符的数量 ss.append( ++x );//依次存入ss中 } } } } } return ss.toString(); } }