Java程序中带有4个参数的Oracle INSTR有趣吗? [关闭]

Posted

技术标签:

【中文标题】Java程序中带有4个参数的Oracle INSTR有趣吗? [关闭]【英文标题】:Oracle INSTR fun with 4 parameter in Java Program? [closed] 【发布时间】:2016-03-29 13:20:32 【问题描述】:

在甲骨文中:

案例一:

SELECT INSTR('Viveok Srinivoasamoorthy','o',15,1) FROM DUAL;

输出:19

案例 2: 选择 INSTR('Viveok Srinivoasamoorthy','o',15,2) 从双; 输出:20

同理,我需要开发一个有4个参数(字符串、子字符串、start_position和nthoccurrence)的java程序来实现。

这是我尝试过的代码,但在下面的代码中我找不到第 n 次出现:

public static int nthoccur(String str1,String str2,int occurs )

    int f_occurance=0;
    f_occurance=str1.indexOf(str2, occurs-1)+1;
    System.out.println("f_occurance Value------*** "+f_occurance);
    return f_occurance;     
 

public static void main(String args[])


int resultinst=nthoccur("Viveok Srinivoasamoorthy","o",15);
System.out.println(resultinst);

输出:

f_occurance Value------*** 19
19

现在我想使用java程序从字符串的第15个位置找到第二个出现的“o”。如何使用 Java 程序实现案例 2?

【问题讨论】:

*** 不是“其他人为您编写代码”服务。请发布您到目前为止编写的代码;并告诉我们你被困在哪里。此处不接受“卡在第 0 步;请帮助开始”。 永远不要通过 cmets 添加更多信息。改为编辑您的问题。请:首先转到帮助中心,并在那里花一些时间了解“好问题”的样子。好问题得到好答案;不好的问题......没那么多。 【参考方案1】:

这是一个应该模仿 INSTR 的方法。

评论将帮助您逐步了解它的工作原理:

public static int instr(final String str, final String substring, int position, final int occurrence) 

    // matches counter
    int count = 0;
    // index of last match
    int indexFound = 0;

    // while we haven't reached the desired match count, and we still find another match
    while (count != occurrence && (indexFound = str.indexOf(substring, position)) != -1)

    
        // increment match count
        count++;
        // position the next search index, to the end of the current match
        position = indexFound + substring.length();

    

    if (count == occurrence) 
        // the number of occurrences was matched, return the last match index
        return indexFound + 1; // index in Java starts at 0
     else 
        // the number of occurrences was not matched, return 0
        return 0;
    


【讨论】:

非常感谢@Berger,它工作得很好。【参考方案2】:

这里还有另一种方法:-1 表示没有发生。 getInstring(String input, String substr, int start, int occurence) char[] tempstring = input.substring(start).replaceAll(substr, "-").toCharArray(); int occurindex = 0; int counter = 0; for (int i = 0; i < tempstring.length; i++) if (":-".equals(":" + tempstring[i])) occurindex++; counter = i; if (occurindex == occurence) break; return counter == 0 ? -1 : counter + start + 1;

【讨论】:

以上是关于Java程序中带有4个参数的Oracle INSTR有趣吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在函数 Oracle PLSQL 中带最高薪水员工 id 的查询?

是否有可能在Oracle中有条件地透视不同数据类型的列?

oracle中带参存储过程的使用

oracle 11.2.0.2以后变动的一些隐含参数

oracle中的存储过程,有啥作用,以及怎么在代码中使用?

静默安装weblogic12c提示INST-07319: Oracle 主目录(O) 位置的验证失败。指定的位置已存在, 是非空目录并且不是有效的 Oracle 主目录