J2ME中的StringTokenizer

在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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值