思路:用ArrayList存放元音字母(因为有个contains方法),并记录元音的序号和放进栈里面(反转类似栈先进后出),里面用到string与char数组的转换
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Stack; public class reverseWords { public static String reverseVowels(String s) { Stack<String> replace=new Stack<String>(); //利用栈先进后出 List<Character> contain=new ArrayList<Character>(); //存储元音字母 int count=0; //元音字母个数 contain.add('a'); contain.add('e'); contain.add('i'); contain.add('o'); contain.add('u'); contain.add('A'); contain.add('E'); contain.add('I'); contain.add('O'); contain.add('U'); char[] ch=s.toCharArray(); for(int i=0;i<s.length();i++){ if(contain.contains(ch[i])) count++; } if(count<2) return s; //元音小于2个不用反转 int[] num=new int[count]; //记录元音字母位置 int j=-1; for(int i=0;i<ch.length;i++){ if(contain.contains(ch[i])){ num[++j]=i; replace.push(String.valueOf(ch[i])); //进栈 } } for(int i=0;i<count;i++){ ch[num[i]]=replace.pop().charAt(0); } return String.valueOf(ch); //char数组转string不可以用toString() } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ String str=scanner.next(); System.out.println(reverseVowels(str)); } } }