加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在字符串或表coulmn中找到未知的重复子字符串

发布时间:2020-12-15 02:15:18 所属栏目:Java 来源:网络整理
导读:我有一大串数字是程序的输入(我认为序列名称是’S’)它可以是字符串或表列. 由表 1生成的输入字符串(S). 我想找到制作“S”字符串的未知子字符串. 每个子字符串由100个数字组成. 我们简化了如下例子:每个子字符串包含三个数字而不是100个数字. 表1: 表1描
我有一大串数字是程序的输入(我认为序列名称是’S’)它可以是字符串或表列.
由表 1生成的输入字符串(S).
我想找到制作“S”字符串的未知子字符串.
每个子字符串由100个数字组成.

我们简化了如下例子:每个子字符串包含三个数字而不是100个数字.

表1:

enter image description here

表1描述:
表1的每一行属于在“s”sting中重复的子字符串之一.
对于每一列,我们正好有十个数字,这些数字通过随机重复的数字属于该列.
例如:
对于第一列,我们可以有例如四个11和六个65或一个11和九个65等等,其他列就是这样的.对于具有一个数字的列,每十个重复是该数字,例如第七列,如下所示:50 50 50 50 50 50 50 50 50 50.

输出是重复的子串,形成“S”字符串.
输出:

11,10,13
30,40,50
65,66,61

谁能帮助我用pl_sql或java来解决问题.

解决方法

这里有一些我认为可以解决你所描述的基本问题的PL / SQL.它将扩展到我认为的更大的数据集,但我不得不做出一些关于将数字拆分成组的假设.基本过程适用于您提供的数据,描述和结果.

SET SERVEROUTPUT ON;

DECLARE
    TYPE numbers_t IS TABLE OF INT(2);
    TYPE output_t  IS TABLE OF VARCHAR2(100);

    c_example VARCHAR2(160) := '2222222222111165656510101030306666666666134061134061616161611030303030306666666613131313134040404061505050505050505050506565656565656565656522222166666666666666';
    c_place   INT := 1;
    c_chunk   INT := 1;
    l_numbers numbers_t := numbers_t();
    l_output  output_t  := output_t();
    n binary_integer;

BEGIN
    l_output.EXTEND(3);
    WHILE c_place <= LENGTH(c_example)
    LOOP
        l_numbers.EXTEND(10);
        WHILE c_chunk <= 10
        LOOP
            l_numbers(c_chunk) := SUBSTR(c_example,c_place,2);
            c_place := c_place + 2;
            c_chunk := c_chunk + 1;
        END LOOP;
        c_chunk := 1;
        l_numbers := SET(l_numbers);
        n := l_numbers.FIRST;
        WHILE (n IS NOT NULL)
        LOOP
                CASE
                WHEN l_numbers(n) < 30 THEN l_output(1) := l_output(1) || ',' || l_numbers(n);
                WHEN l_numbers(n) > 50 THEN l_output(3) := l_output(3) || ',' || l_numbers(n);
                ELSE l_output(2) := l_output(2) || ',' || l_numbers(n);
            END CASE;
            n := l_numbers.NEXT(n);
        END LOOP;
        l_numbers.DELETE();
    END LOOP;
    DBMS_OUTPUT.PUT_LINE(TRIM(LEADING ',' FROM l_output(1)));
    DBMS_OUTPUT.PUT_LINE(TRIM(LEADING ',' FROM l_output(2)));
    DBMS_OUTPUT.PUT_LINE(TRIM(LEADING ',' FROM l_output(3)));
END;
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读