java中是否有任何实用方法可以在java中查找重复的重复字符?
例如,“允许”是不允许的,因为它有两个重复的“l”,“重复”是允许的,尽管它有两个“e”
我在看StringUtils
,但那里什么都没有。我正在考虑写类似的东西
for (each char in string) {
if (char at counter of loop == char at next counter) {
break;
}}
循环方法是一种解决方案,或者,如果您想要一些花哨的东西,您可以使用正则表达式方法,它看起来像:
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;
}
没有实用的方法可以解决这个问题,因为我认为这个问题并不常见到值得一个。它对于任何一般用途来说都太具体了。
按照您的建议制作自己的方法,看起来不错。
听起来不像是实用程序的常见用例。您的代码逻辑似乎足够好。优化检查它是否是单个字符并在下一个计数器检查字符不超过字符串长度应该做。
试试这个:
Character last = null;
boolean allowed = true;
for (Character c : str.toCharArray()) {
if (c.equals(last)) {
allowed = false;
break;
}
last = c.charValue();
}
你可以试试这个:
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]