主页 > 电脑硬件  > 

Java实现简单动态字符串

Java实现简单动态字符串
Java 实现简单动态字符串

用 Java 实现简单动态字符串(Simple Dynamic String,SDS)结构体的示例代码:

import java.util.Arrays; public class SDS { // 字符串结束字符 private static char endChar = '\0'; // 字符串长度 private int len; // buf数组中未使用的字节数 private int free; // 字节数组 private char[] buf; // 构造函数 public SDS(String str) { this.len = str.length(); this.buf = Arrays.copyOf(str.toCharArray(), this.len + 1); this.buf[this.len] = endChar; this.free = buf.length - len - 1; } // 获取buf数组 public char[] getBuf() { return buf; } // 拼接字符串 sdscat 方法用于拼接字符串,实现了空间预分配策略。 public void sdscat(String str) { char[] strTemp = str.toCharArray(); int strTempLen = str.length(); int lastLen = this.len + strTempLen; // 先判断长度 if (lastLen < 1 * Math.pow(2, 20)) { // 小于1MB(2^20B),那么free空间=len大小,buf的实际长度为2*len+1 this.free = lastLen; } else { // 大于1MB(2^20B),那么free空间=1MB,buf的实际长度为1MB+len+1 this.free = (int) Math.pow(2, 20); } this.len = lastLen; // 拼接数组 char[] originChar = this.toString().toCharArray(); char[] result = Arrays.copyOf(originChar, lastLen); System.arraycopy(strTemp, 0, result, originChar.length, strTemp.length); this.buf = Arrays.copyOf(result, lastLen + 1); this.buf[lastLen] = endChar; } public int getLen() { return len; } public void setLen(int len) { this.len = len; } public int getFree() { return free; } public void setFree(int free) { this.free = free; } // toString 方法用于将 SDS 对象转换为字符串表示形式。 @Override public String toString() { StringBuilder stringBuilder = new StringBuilder(""); for (int i = 0; i < this.buf.length; i++) { if (this.buf[i]!= endChar ) { stringBuilder.append(this.buf[i]); } } return stringBuilder.toString(); } }

测试:

public class TestSDS { public static void main(String[] args) { SDS sds = new SDS("a a"); System.out.println(sds.getLen() +","+ sds.getFree()); char[] a = sds.getBuf(); for (char aTemp : a) { System.out.println(aTemp); } } }
标签:

Java实现简单动态字符串由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Java实现简单动态字符串