依照每個單字出現的次數,由大到小,排列印出。
假設:
String oriString = "This is a book. That is a pencil"
輸出:
is 出現 2 次
a 出現 2 次
This 出現 1 次
That 出現 1 次
book 出現 1 次
pencil 出現 1 次
程式碼:
執行結果:
- import java.util.regex.*;
- import java.util.*;
- public class StringSort {
- public static void main(String[] args){
- String oriString = "This is a book. That is a pencil.";
- Pattern p = Pattern.compile("\\w[^\\.\\s]*");
- Matcher m = p.matcher(oriString);
- Set<string> sortVerb = new TreeSet<string>();
- ArrayList<string> strArray = new ArrayList<string>();
- while(m.find()){
- strArray.add(m.group());
- sortVerb.add(m.group());
- }
- //計算oriString中的各個單字的次數
- int[] verbCount = new int[sortVerb.size()];
- int index = 0;
- for(String s : sortVerb){
- int count = 0;
- for(String sr : strArray){
- if(s.equals(sr))
- count++;
- }
- verbCount[index++] = count;
- }
- //開始排序
- int[] indexArray = new int[sortVerb.size()];
- for(int i = 0; i < indexArray.length; i++)
- indexArray[i] = i;
- int temp, indexTemp;
- index = 0;
- for (int f = 1; f < sortVerb.size(); f++) {
- if (verbCount[f] < verbCount[f-1])
- continue;
- temp = verbCount[f];
- indexTemp = indexArray[f];
- index = f-1;
- while ((index >= 0)&&(verbCount[index] < temp)) {
- verbCount[index+1] = verbCount[index];
- indexArray[index+1] = indexArray[index];
- index--;
- }
- verbCount[index+1]=temp;
- indexArray[index+1] = indexTemp;
- }
- Object[] printStr = sortVerb.toArray();
- for(int i = 0; i < indexArray.length; i++)
- System.out.println(printStr[indexArray[i]].toString()+"出現 "+verbCount[i]+"次");
- }
- }
- a出現 2次
- is出現 2次
- That出現 1次
- This出現 1次
- book出現 1次
- pencil出現 1次
0 意見:
張貼留言