Pages

2010年10月2日 星期六

Java String 依照單字出現次數/頻率高的依序印出

功能:
依照每個單字出現的次數,由大到小,排列印出。

假設:
String oriString = "This is a book. That is a pencil"

輸出:
is 出現 2 次
a 出現 2 次
This 出現 1 次
That 出現 1 次
book 出現 1 次
pencil 出現 1 次

程式碼:
  1. import java.util.regex.*;
  2. import java.util.*;
  3.  
  4. public class StringSort {
  5. public static void main(String[] args){
  6. String oriString = "This is a book. That is a pencil.";
  7. Pattern p = Pattern.compile("\\w[^\\.\\s]*");
  8. Matcher m = p.matcher(oriString);
  9. Set<string> sortVerb = new TreeSet<string>();
  10. ArrayList<string> strArray = new ArrayList<string>();
  11. while(m.find()){
  12. strArray.add(m.group());
  13. sortVerb.add(m.group());
  14. }
  15.  
  16. //計算oriString中的各個單字的次數
  17. int[] verbCount = new int[sortVerb.size()];
  18. int index = 0;
  19. for(String s : sortVerb){
  20. int count = 0;
  21. for(String sr : strArray){
  22. if(s.equals(sr))
  23. count++;
  24. }
  25. verbCount[index++] = count;
  26. }
  27.  
  28. //開始排序
  29. int[] indexArray = new int[sortVerb.size()];
  30. for(int i = 0; i < indexArray.length; i++)
  31. indexArray[i] = i;
  32. int temp, indexTemp;
  33. index = 0;
  34. for (int f = 1; f < sortVerb.size(); f++) {
  35. if (verbCount[f] < verbCount[f-1])
  36. continue;
  37. temp = verbCount[f];
  38. indexTemp = indexArray[f];
  39. index = f-1;
  40. while ((index >= 0)&&(verbCount[index] < temp)) {
  41. verbCount[index+1] = verbCount[index];
  42. indexArray[index+1] = indexArray[index];
  43. index--;
  44. }
  45. verbCount[index+1]=temp;
  46. indexArray[index+1] = indexTemp;
  47. }
  48. Object[] printStr = sortVerb.toArray();
  49. for(int i = 0; i < indexArray.length; i++)
  50. System.out.println(printStr[indexArray[i]].toString()+"出現 "+verbCount[i]+"次");
  51. }
  52. }
  53.  
執行結果:
  1. a出現 2
  2. is出現 2
  3. That出現 1
  4. This出現 1
  5. book出現 1
  6. pencil出現 1

Related Posts:

  • Microsoft JDBC 連接 URL 範例 在下列範例中,範例程式碼會在連接 URL 中設定各種連接屬性,然後呼叫 DriverManager 類別的 getConnection 方法,以傳回SQLServerConnection 物件。 接著,範例程式碼會使用 SQLServerConnection 物件的 createStatement 方法建立 SQLServerStatemen… Read More
  • Java判斷作業系統與檔案路徑如何在java程式中判斷幕前作業系統是何種作業系統 以下位範例程式: public class OSValidator { public static void main(String[] args) { if (isWindows()) { System.out.println("This is Windows"); } else if (isMac()) { … Read More
  • Java String 依照單字出現次數/頻率高的依序印出功能: 依照每個單字出現的次數,由大到小,排列印出。 假設: 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… Read More
  • Microsoft JDBC for MS SQL Server 系統需求 JDBC for SQL Server 2000 JAR 描 述 msbase.jar mssqlserver.jar msutil.jar jar 類別庫會提供 MSSQL2000 JDBC DRIVER 的支援。 JDBC Driver支援 JRE 1.4,但連到SQL 2005 或 2008會出現異常。 JDBC 2.0 for SQL Server 2005 … Read More
  • Java Connection.setAutoCommit使用注意事項setAutoCommit總的來說就是保持資料的完整性,一個系統的更新操作可能要涉及多張表,需多個SQL語句進行操作 迴圈裡連續的進行插入操作,如果你在開始時設置了:conn.setAutoCommit(false); 最後才進行conn.commit(),這樣你即使插入的時候報錯,修改的內容也不會提交到資料庫, 而如果你沒有手動的進行setAutoCommit(false); 出錯時就會造成,前幾條插入,後幾條沒有 會形成髒資料~~ … Read More

0 意見: