>Java >java지도 시간 >Java에서 문자열의 다른 문자와 숫자를 얻는 방법

Java에서 문자열의 다른 문자와 숫자를 얻는 방법

王林
王林앞으로
2023-04-20 12:04:061872검색

문자열에서 다양한 문자와 숫자를 얻는 방법

이 질문은 두 단계로 나눌 수 있습니다. 첫 번째 단계는 다른 문자를 찾는 것이고, 두 번째 단계는 숫자를 세는 것입니다. 좀 말도 안되는 것 같죠? 먼저 답변을 드리겠습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제