0

Javaで繰り返し重複する文字を見つけるためのユーティリティメソッドはJavaにありますか?

たとえば、「許可」は「l」が 2 つ繰り返されるため許可されず、「e」が 2 つあるにもかかわらず「繰り返し」は許可されます。

を見ていましたがStringUtils、そこには何もありません。のようなものを書こうと思っています。

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

5 に答える 5

3

ループアプローチは1つの解決策です。または、何か凝ったものが必要な場合は、次のような正規表現アプローチを使用できます。

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;
}
于 2013-02-27T17:27:39.913 に答える
2

この問題は実際にそれに値するほど一般的ではないと思うので、これには実用的な方法はありません。一般的な使用にはあまりにも具体的です。

あなたが提案したように独自の方法を作成してください。

于 2013-02-27T17:22:10.383 に答える
0

これを試して:

Character last = null;
boolean allowed = true;

for (Character c : str.toCharArray()) {
    if (c.equals(last)) {
        allowed = false;
        break;
    }
    last = c.charValue();
}
于 2013-02-27T17:27:11.447 に答える
0

ユーティリティの一般的なユースケースとは思えません。あなたのコードロジックは十分に良さそうです。単一の文字かどうかを確認し、次のカウンターで文字が文字列の長さを超えていないかどうかを確認する最適化を行う必要があります。

于 2013-02-27T17:24:26.210 に答える
-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]
于 2013-02-27T17:48:21.730 に答える