到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comwww.javaresearch.org无关,不对该信息负责.通过http://www.javaresearch.org/article//showarticle.jsp?column=3&thread=26835访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
J2ME中的StringTokenizer
作者:Jagie 来源:www.javaresearch.org  发布时间:2006-02-27 15:47:57.047


在se中用惯了的StringTokenizer,在me中没有了.怎么办呢,分割好的字符串是不得不解析的,老板交代的任务是要做的:).本来想自己土法上马做一个,可是"重新发明轮子",好像不是那么高明,先用google找了找,果然有高人已经实现了.代码在下面:

  1. import java.util.*;
  2. public class StringTokenizer implements Enumeration
  3. {
  4. private void setMaxDelimChar()
  5. {
  6. if(delimiters == null)
  7. {
  8. maxDelimChar = '\0';
  9. return;
  10. }
  11. char c = '\0';
  12. for(int i = 0; i < delimiters.length(); i++)
  13. {
  14. char c1 = delimiters.charAt(i);
  15. if(c < c1)
  16. c = c1;
  17. }
  18. maxDelimChar = c;
  19. }
  20. public StringTokenizer(String s, String s1, boolean flag)
  21. {
  22. currentPosition = 0;
  23. newPosition = -1;
  24. delimsChanged = false;
  25. str = s;
  26. maxPosition = s.length();
  27. delimiters = s1;
  28. retDelims = flag;
  29. setMaxDelimChar();
  30. }
  31. public StringTokenizer(String s, String s1)
  32. {
  33. this(s, s1, false);
  34. }
  35. public StringTokenizer(String s)
  36. {
  37. this(s, " \t\n\r\f"false);
  38. }
  39. private int skipDelimiters(int i)
  40. {
  41. if(delimiters == null)
  42. throw new NullPointerException();
  43. int j;
  44. for(j = i; !retDelims && j < maxPosition; j++)
  45. {
  46. char c = str.charAt(j);
  47. if(c > maxDelimChar || delimiters.indexOf(c) < 0)
  48. break;
  49. }
  50. return j;
  51. }
  52. private int scanToken(int i)
  53. {
  54. int j;
  55. for(j = i; j < maxPosition; j++)
  56. {
  57. char c = str.charAt(j);
  58. if(c <= maxDelimChar && delimiters.indexOf(c) >= 0)
  59. break;
  60. }
  61. if(retDelims && i == j)
  62. {
  63. char c1 = str.charAt(j);
  64. if(c1 <= maxDelimChar && delimiters.indexOf(c1) >= 0)
  65. j++;
  66. }
  67. return j;
  68. }
  69. public boolean hasMoreTokens()
  70. {
  71. newPosition = skipDelimiters(currentPosition);
  72. return newPosition < maxPosition;
  73. }
  74. public String nextToken()
  75. {
  76. currentPosition = newPosition < 0 || delimsChanged ? skipDelimiters(currentPosition) : newPosition;
  77. delimsChanged = false;
  78. newPosition = -1;
  79. if(currentPosition >= maxPosition)
  80. {
  81. throw new NoSuchElementException();
  82. else
  83. {
  84. int i = currentPosition;
  85. currentPosition = scanToken(currentPosition);
  86. return str.substring(i, currentPosition);
  87. }
  88. }
  89. public String nextToken(String s)
  90. {
  91. delimiters = s;
  92. delimsChanged = true;
  93. setMaxDelimChar();
  94. return nextToken();
  95. }
  96. public boolean hasMoreElements()
  97. {
  98. return hasMoreTokens();
  99. }
  100. public Object nextElement()
  101. {
  102. return nextToken();
  103. }
  104. public int countTokens()
  105. {
  106. int i = 0;
  107. for(int j = currentPosition; j < maxPosition;)
  108. {
  109. j = skipDelimiters(j);
  110. if(j >= maxPosition)
  111. break;
  112. j = scanToken(j);
  113. i++;
  114. }
  115. return i;
  116. }
  117. private int currentPosition;
  118. private int newPosition;
  119. private int maxPosition;
  120. private String str;
  121. private String delimiters;
  122. private boolean retDelims;
  123. private boolean delimsChanged;
  124. private char maxDelimChar;
  125. }


原文在这里:http://wap.tutorials.de/t-127933.html

 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读