문자열에서 다양한 문자와 숫자를 얻는 방법
이 질문은 두 단계로 나눌 수 있습니다. 첫 번째 단계는 다른 문자를 찾는 것이고, 두 번째 단계는 숫자를 세는 것입니다. 좀 말도 안되는 것 같죠? 먼저 답변을 드리겠습니다.
public class DistinctCharsCount { public static void main(String[] args) { printDistinctCharsWithCount("itwanger"); printDistinctCharsWithCount("chenmowanger"); } private static void printDistinctCharsWithCount(String input) { Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>(); for (char c : input.toCharArray()) { Integer oldValue = charsWithCountMap.get(c); int newValue = (oldValue == null) ? 1 : Integer.sum(oldValue, 1); charsWithCountMap.put(c, newValue); } System.out.println(charsWithCountMap); } }
프로그램의 출력 결과는 다음과 같습니다.
{i=1, t=1, w=1, a=1, n=1, g=1, e=1, r=1} {c=1, h=1, e=2, n=2, m=1, o=1, w=1, a=1, g=1, r=1}
내 아이디어에 대해 이야기하겠습니다.
1) LinkedHashMap을 선언하거나 HashMap을 사용할 수 있지만 전자는 분할 후 문자열 순서를 유지할 수 있으며 결과는 한눈에 더 명확해 보입니다.
Map을 사용하는 이유는 Map의 키는 반복이 허용되지 않고, 반복되는 문자 수만 누적될 수 있기 때문입니다.
2) 문자열을 문자로 분할하고 순회합니다.
3) 키가 null이면 해당 숫자가 +1이라는 의미이고, 그렇지 않으면 이전 값에 +1이 추가된 다음 다시 맵에 입력되어 이전 문자 수를 덮어씁니다.
생각이 너무 명확하죠? 박수를 보내지 않을 수 없네요.
JDK 8 이후 Map에는 여러 키에 값을 한 번에 할당하는 매우 강력한 메소드 merge()가 추가되었습니다.
private static void printDistinctCharsWithCountMerge(String input) { Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>(); for (char c : input.toCharArray()) { charsWithCountMap.merge(c, 1, Integer::sum); } System.out.println(charsWithCountMap); }
한 줄의 코드로 매우 강력하지 않나요? 첫 번째 매개변수는 키, 두 번째 매개변수는 값, 세 번째 매개변수는 BiFunction입니다. 즉, 키가 이미 존재하는 경우 BiFunction을 기반으로 새 값을 다시 계산한다는 의미입니다.
문자가 처음으로 나타나면 값을 1로 할당하고, 그렇지 않으면 이전 값을 1로 합산합니다.
위 내용은 Java에서 문자열의 다른 문자와 숫자를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!