我在编写名为replace()
的I类建筑物的LString
方法时遇到问题。该类为构建字符串创建链接列表对象,类似于String
或StringBuilder
,但使用链接列表而不是数组。
replace(int start, int end, LString lStr)
是一种通过在LString
的节点之间插入另一个名为LString
的{{1}}来更改给定lStr
链接列表的方法。 start
。我正在努力想出一种有效的写作方式。任何建议都值得赞赏,试图学习Java。
以下是我的代码,end
靠近底部:
replace()
答案 0 :(得分:0)
这是替换方法
public LString replace(int start, int end, LString lStr) {
if (start < 0 || end > this.length() || start > end) {
throw new IndexOutOfBoundsException();
}
LString repString = new LString();
node node = this.front;
node cpy = new node(node.data);
repString.front = cpy;
for (int i = 0; i < start; i++) {
node = node.next;
cpy = cpy.next = new node(node.data);
}
node nIt = node;
node = lStr.front;
for (int i = start+1; i < end; i++) {
node = node.next;
nIt = nIt.next;
cpy = cpy.next = new node(node.data);
}
node = nIt;
for (int i = end; i < this.length(); i++) {
node = node.next;
cpy = cpy.next = new node(node.data);
}
return repString;
}
为您的编码实践。
private class Node
)node.next()).
答案 1 :(得分:0)
由于您的replace()
方法返回LString
,我假设您希望结果为副本。否则我建议就地替换,因为LString
是可变的。
这是一个经过测试的功能实现供您考虑。
public LString replace(int start, int end, LString lStr) {
if (start < 0 || end > length() || start > end) {
throw new IndexOutOfBoundsException();
}
LString result = new LString();
node node = this.front;
node copy = new node(node.data);
result.front = copy;
for (int i = 1; i < start; i++) {
node = node.next;
copy = copy.next = new node(node.data);
}
node replace = lStr.front;
for (int i = 0; i < lStr.length(); i++) {
copy = copy.next = new node(replace.data);
replace = replace.next;
}
for (int i = start; i < end; i++) {
node = node.next;
}
for (int i = end; i < length(); i++) {
node = node.next;
copy = copy.next = new node(node.data);
}
result.size = length() + lStr.length() - (end - start);
return result;
}
不幸的是,另一个答案中的代码被窃听了。看起来@Jemaro从我的其他答案中复制了substring()
方法并尝试使其适合于此而不进行测试,但没有成功。