思路:用ArrayList存放母音字母(因為有個contains方法),並記錄母音的序號和放進棧裡面(反轉類似棧先進後出),裡面用到string與char數組的轉換 ...
思路:用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)); } } }