1. package org.jr.util;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年2月12日
  6. * @author Cherami
  7. */
  8. import java.util.regex.*;
  9. /**
  10. * 此类是属性序列的抽象。
  11. * 所谓的属性序列是指以一定的分隔符分隔的一个属性集合字符串。
  12. * 这个类和本包中的另一个类的一个方法具有类似的左右,但是这个类因为可以使用规则表达式,
  13. * 因此功能要强大一些。
  14. * @see StringUtil#split(String source, String delim) split
  15. * @since 0.1
  16. */
  17. public class PropertySerials {
  18. private char splitChar = '\u0000';
  19. protected String sourceString;
  20. protected String result[];
  21. protected String splitPattern;
  22. protected Pattern pattern;
  23. /**
  24. * 构造方法,根据字符串生成一个属性序列类实例。
  25. * 分隔符使用缺省的'\u0000'。
  26. * @param source 属性序列的原始字符串
  27. * @since 0.1
  28. */
  29. public PropertySerials(String source) {
  30. splitPattern = "[" + splitChar + "]{1}";
  31. pattern = Pattern.compile(splitPattern);
  32. sourceString = source;
  33. }
  34. /**
  35. * 构造方法,根据字符串和分隔符生成一个属性序列类实例。
  36. * @param source 属性序列的原始字符串
  37. * @param splitChar 分隔符
  38. * @since 0.1
  39. */
  40. public PropertySerials(String source, char splitChar) {
  41. this.splitChar = splitChar;
  42. splitPattern = "[" + splitChar + "]{1}";
  43. pattern = Pattern.compile(splitPattern);
  44. sourceString = source;
  45. }
  46. /**
  47. * 将属性序列字符串分解得到属性数组。
  48. * @return 分解后的属性数组。如果原属性序列字符串为null则返回null。
  49. * @since 0.1
  50. */
  51. public String[] getSerials() {
  52. if (sourceString == null) {
  53. return null;
  54. }
  55. result = pattern.split(sourceString);
  56. return result;
  57. }
  58. /**
  59. * 设置分隔符。
  60. * @param split 分隔符
  61. * @since 0.1
  62. */
  63. public void setSplitChar(char split) {
  64. splitChar = split;
  65. splitPattern = "[" + splitChar + "]{1}";
  66. pattern = Pattern.compile(splitPattern);
  67. }
  68. /**
  69. * 得到使用的分隔符。
  70. * @return 使用的分隔符
  71. * @deprecated 本方法不赞成使用,因为在一般情况下推荐使用规则表达式模式而不是单独的字符分隔符。
  72. * 并且在直接使用规则表达式模式生成类实例或者调用setSplitPattern方法后本方法的返回值没有意义。
  73. * @since 0.1
  74. */
  75. public char getSplitChar() {
  76. return splitChar;
  77. }
  78. /**
  79. * 设置分隔模式。
  80. * @param splitPattern 分隔模式,具体的模式规则请参考java.util.regex.Pattern类的说明。
  81. * @since 0.1
  82. */
  83. public void setSplitPattern(String splitPattern) {
  84. if ( (splitPattern != null) && (!splitPattern.equals(this.splitPattern))) {
  85. this.splitPattern = splitPattern;
  86. pattern = Pattern.compile(splitPattern);
  87. }
  88. }
  89. /**
  90. * 得到使用的分隔模式。
  91. * @return 使用的分隔模式
  92. * @since 0.1
  93. */
  94. public String getSplitPattern() {
  95. return splitPattern;
  96. }
  97. /**
  98. * 返回类实例的字符串表示。
  99. * @return 类实例的字符串表示
  100. * @since 0.1
  101. */
  102. public String toString() {
  103. StringBuffer temp = new StringBuffer();
  104. for (int i = 0; i < result.length - 1; i++) {
  105. temp.append(result[i]);
  106. temp.append(splitChar);
  107. }
  108. temp.append(result[result.length - 1]);
  109. return temp.toString();
  110. }
  111. }