Java 如何删除大字符串数据中的重复字符串?

Java 如何删除大字符串数据中的重复字符串?,java,blackberry,Java,Blackberry,e、 g.我得到的数据像“vivartvivartpandey” 我想要像“vivartpandey”这样的输出 只有一件事是固定的,即数据将类似于string1+string1+string2 或类似于string1+string2(无重复) 但是string1和string2都是可变的 那么如何识别string1并删除重复的string1呢?我们需要更多的约束才能实现这一点。例如,如果您得到“ssssabcd”,则无法确定string1是“ssss”还是“ss”(即如果发生重复)使用如下正则

e、 g.我得到的数据像“vivartvivartpandey” 我想要像“vivartpandey”这样的输出 只有一件事是固定的,即数据将类似于string1+string1+string2 或类似于string1+string2(无重复) 但是string1和string2都是可变的


那么如何识别string1并删除重复的string1呢?

我们需要更多的约束才能实现这一点。例如,如果您得到“ssssabcd”,则无法确定string1是“ssss”还是“ss”(即如果发生重复)

使用如下正则表达式:

String s = "vivaryvivartypadney";

Matcher m = Pattern.compile("(.*)\g(-1)(.*)").matcher(s);

if (m.find())
    String prefix = m.group(1), suffix = m.group(2);

regexp中的第一个括号定义了一个组,\g(-1)是对先前匹配组的相对引用。现在,如果您的字符串类似于“vivavivavichile”,那么您将得到一个匹配,但这只是因为“第一个”重复,而不是较长的第二个(如其他答案所述)。如果您需要的话,我将把它放在一个循环中,以获得最长的匹配。

我已尝试创建一个简单的解决方案

    int index = 0;
    for (int i = 0; i <= text.length() / 2; i++) {
        String string1 = text.substring(0, i);
        String string2 = text.substring(i, 2 * i);
        if (string1.equals(string2)) {
            index = i;
        }
    }
    System.out.println("without duplicate: " + text.substring(index));
int索引=0;

对于(int i=0;i
'vivartvivartpandey'-replace'(.+)\1','$1'
似乎至少对您在PowerShell中的示例有效。不知道Java(也应该有效),也不知道它在一般情况下是否能正常工作。很抱歉,我没有澄清这种情况。但这种情况不会出现。字符可以重复,但不是那样的。例如。“SSSIEFGSSIEFACD”