java中是否有任何实用工具方法可以在java中找到重复的重复字符?
e.g。 “允许”是不允许的,因为它有两个重复的'l'和'重复'是允许的,虽然它有两个'e'
我看着StringUtils
,但那里没有任何东西。我想写一些类似
for (each char in string) {
if (char at counter of loop == char at next counter) {
break;
}}
答案 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]