我写了一个程序,它在plsql中正确执行,但输出错误。从逻辑上讲,我认为代码没有任何问题。这是代码:
begin
inpstr := rtrim(ltrim(regexp_replace(inp,'s{2,}','')));
lastpos := instr(inpstr,' ',-1);
out3 := SUBSTR(inpstr, INSTR(inpstr,' ',-1) + 1);
pos := instr(inpstr,' ');
out1 := substr(inpstr,1,pos);
out2 := substr(inpstr,pos,lastpos);
end;
O/p:
dbms_output.put_line('First Word:: '||out1||' '||'Second Word:: '||out2||' '||'Lastword:: '||out3);
PROCEDURE SPLITWORDS compiled
anonymous block completed
First Word:: Welcome Second Word:: to the world of analyti Lastword:: analytics!
但第二个词应该检索到"的世界",但它获取了分析。
有人能告诉我我的代码出了什么问题吗。
谢谢,Dex。
分配out2
时,至少必须从lastPos
减去pos
。
因为示例文本"欢迎来到分析世界!"中的lastPos
将是24,pos
将有8,所以pos 8中长度为24的子字符串是。。。右:"分析世界"
substr
函数的第三个参数是子字符串的长度,而不是结束字符的位置。从lastpos
中减去pos
(见下文)将允许您的代码工作。
out2 := substr(inpstr, pos, lastpos - pos);