4.【思考题3-1】实现MyString类声明的以下成员方法,要求一次遍历算法效率。 public MyString trim() //返回this串删除所有空格的字符串,不改变this串
时间: 2024-10-11 09:12:43 浏览: 22
MyString 字符串类仿写_C++_(四种版本,引用计数,迭代器,加锁)
【思考题3-1】在设计`MyString`类的`trim()`方法时,为了保持高效性并只遍历一次,你可以采用以下步骤:
1. 定义一个新的`StringBuilder`或者`StringBuffer`对象,这两个类内部都有对字符串的操作优化,例如在处理长度变化较小的情况时可以避免频繁创建新的对象。
2. 遍历当前`MyString`对象的字符数组(假设为`char[] chars`),从两端开始检查。对于每个字符,如果它是空格(ASCII码为32),则跳过它;如果不是空格,则将字符添加到新字符串中。
3. 当遍历完成后,将新字符串设置给`trim()`方法的结果,此时`MyString`对象的状态并没有改变,因为结果存储在一个新的对象里。
以下是伪代码示例:
```java
public MyString trim() {
StringBuilder trimmedChars = new StringBuilder();
int start = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] != ' ') {
while (start < i && chars[start] == ' ') {
start++;
}
trimmedChars.append(chars[i]);
while (i < chars.length - 1 && chars[i + 1] == ' ') {
i++;
}
}
}
// 如果头或尾还有非空格,追加它们
while (start < chars.length && chars[start] != ' ') {
trimmedChars.append(chars[start++]);
}
return new MyString(trimmedChars.toString());
}
```
阅读全文