单词倒排

题目描述

对字符串中的所有单词进行倒排。

说明:

1、每个单词是以26个大写或小写英文字母构成;

2’-‘做为单词连接符使用时,视为单词的一部分,例如“aa-bb”是一个单词;但连续出现2’-’及以上时视为单词间隔符,“aa--bb”中的“--”视为间隔符,是2个单词“aa”“bb”

3、非构成单词的字符均视为单词间隔符;

4、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

5、每个单词最长20个字母;

输入

字符串

输出

倒排的字符串

样例输入

I am a--student

样例输出

student a am I

提示

 

地区

深圳研究所

public void wordReverseSort(){
		Scanner sc=new Scanner(System.in);
		String input=sc.nextLine();
		StringBuilder sb=new StringBuilder();
		char[] c=input.toCharArray();
		Stack<Character> stack=new Stack<Character>();
		int count=0;//记录'-'连续出现的个数
		for(int i=c.length-1;i>=0;i--){//对含有'-'的输入字符串进行处理
			if(c[i]==45){
				if(stack.peek()==45){
					count++;
				}else{
					stack.push(c[i]);
					count=1;
				}
			}else{
				if(!stack.isEmpty()&&stack.peek()==45&&count>1){
					stack.pop();
					stack.push(',');
					count=0;
				}
				stack.push(c[i]);
			}
		}
		Stack<Character> stack2=new Stack<Character>();
		while(!stack.isEmpty()){//对含有其他非字母的字符的输入字符串进行处理
			char cc=stack.pop();
			if(cc>122||cc<65||(90<cc&&cc<97)){
				if(cc!=45){
					stack2.push(',');
				}else{
					stack2.push(cc);
				}
			}else{
				stack2.push(cc);
			}
		}
		stack.clear();
		while(!stack2.isEmpty()){
			stack.push(stack2.pop());
		}
		while(!stack.isEmpty()){
			sb.append(stack.pop());
		}
		String str=sb.toString();
		str=str.replaceAll(",", " ");//用' '替换掉所有',';
		String[] output=str.split(" ");
		Stack<String> stack3=new Stack<String>();
		for(int i=0;i<output.length;i++){
			if(!output[i].trim().equals("")){//倒排转换后只允许出现一个空格间隔符;
				if(output[i].trim().length()>20){
					System.out.println("错误:存在长度超过20个字母的单词!");
					return;
				}
				stack3.push(output[i]);
			}
		}
		sb.delete(0, sb.length());
		while(!stack3.isEmpty()){
			sb.append(stack3.pop()+" ");
		}
		sb.deleteCharAt(sb.length()-1);
		System.out.println(sb.toString());
	}





 

 

你可能感兴趣的:(java,华为,校园招聘,倒置字符串,单词倒排)