Java中是否有任何实用方法可以找到重复的重复字符?

时间:2013-02-27 17:19:46

标签: java algorithm

java中是否有任何实用工具方法可以在java中找到重复的重复字符?

e.g。 “允许”是不允许的,因为它有两个重复的'l'和'重复'是允许的,虽然它有两个'e'

我看着StringUtils,但那里没有任何东西。我想写一些类似

的东西
for (each char in string) {
if (char at counter of loop == char at next counter) {
break;
}}

5 个答案:

答案 0 :(得分:3)

循环方法是一种解决方案,或者,如果你想要一些奇特的东西,你可以使用regex approach,它看起来像:

private static final Pattern repeatMatcher = Pattern.compile("^(?:(.)(?!\\1))*$");

public static boolean hasRepeatedCharacters(String input) {
    return !repeatMatcher.matcher(input).matches();
}

但是循环的基本方法肯定更具可读性:

public static boolean hasRepeatedCharacters(String input) {
    for (int i = 0; i < input.length() - 1; i++) {
        if (input.charAt(i) == input.charAt(i + 1)) return true;
    }
    return false;
}

答案 1 :(得分:2)

对此没有实用方法,因为我认为这个问题不够常见,实际上应该得到一个。它对于任何一般用途都太具体了。

按照你的建议制作自己的方法,看起来很好。

答案 2 :(得分:0)

听起来不像实用程序的常见用例。你的代码逻辑看起来很好。优化以检查它是否是单个char并检查下一个计数器的char是否应该超过字符串长度。

答案 3 :(得分:0)

试试这个:

Character last = null;
boolean allowed = true;

for (Character c : str.toCharArray()) {
    if (c.equals(last)) {
        allowed = false;
        break;
    }
    last = c.charValue();
}

答案 4 :(得分:-1)

你可以试试这个:

package com.stack.overflow.works.main;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author sarath_sivan
 */

public class DuplicatesFinder {

    public static void findDuplicates(String inputString) {
        Map<Character, Integer> duplicatesMap = new HashMap<Character, Integer>(); 
        char[] charArray = inputString.toCharArray();
        for (Character ch : charArray) {
            if (duplicatesMap.containsKey(ch)) {
                duplicatesMap.put(ch, duplicatesMap.get(ch) + 1);
            } else {
                duplicatesMap.put(ch, 1);
            }
        }
        Set<Character> keySet = duplicatesMap.keySet();
        for (Character ch: keySet) {
            if (duplicatesMap.get(ch) > 1) {
                System.out.println("[INFO: CHARACTER " + ch + " IS DUPLICATE, OCCURENCE: " + duplicatesMap.get(ch) + " TIMES]");
            }
        }
    }

    public static void main(String[] args) {
        DuplicatesFinder.findDuplicates("sarath kumar sivan");
    }

}

它将为输入字符串“sarath kumar sivan”生成简单的测试结果:

[INFO: CHARACTER   IS DUPLICATE, OCCURENCE: 2 TIMES]
[INFO: CHARACTER s IS DUPLICATE, OCCURENCE: 2 TIMES]
[INFO: CHARACTER r IS DUPLICATE, OCCURENCE: 2 TIMES]
[INFO: CHARACTER a IS DUPLICATE, OCCURENCE: 4 TIMES]