3 回答

TA貢獻1891條經(jīng)驗 獲得超3個贊
您的代碼以這種方式打印的原因是您的循環(huán)打印給定索引的每個字符(和后續(xù)匹配項)。你真的需要用一個循環(huán)將字符和計數(shù)存儲在一個數(shù)據(jù)結構中,然后用第二個循環(huán)顯示計數(shù)。ALinkedHashMap<Character, Integer>
非常適合您的用例(因為它保留了鍵插入順序,不需要額外的邏輯來恢復輸入順序)。我將進行的其他更改包括使用String.toCharArray()
和for-each
循環(huán)。
Map<Character, Integer> map = new LinkedHashMap<>();
for (char ch : x.toUpperCase().toCharArray()) {
? ? map.put(ch, map.getOrDefault(ch, 0) + 1);
}
for (char ch : map.keySet()) {
? ? System.out.printf("%c\t%d%n", ch, map.get(ch));
}
我用xequal測試JAVA并得到了(按要求)
J? ?1
A? ?2
V? ?1
喜歡,

TA貢獻2011條經(jīng)驗 獲得超2個贊
使用 hashMap 可以很容易地累積出現(xiàn)的次數(shù),并且可以輕松地打印迭代 HashMap。
這是代碼:
public class FindOccuranceOfCharacter {
public static void main(String[] args) {
String x;
Scanner input = new Scanner(System.in);
System.out.println("Enter a string");
x = input.nextLine();
HashMap<Character,Integer> occurance = new HashMap<Character,Integer>();
x = x.toUpperCase();
int size = x.length();
for(int i =0;i<size;i++) {
int count=1;
char find = x.charAt(i);
occurance.put(find, occurance.getOrDefault(find, 0) + 1);
}
for (Character key : occurance.keySet()) {
Integer value = occurance.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
}

TA貢獻1847條經(jīng)驗 獲得超11個贊
這不是最佳解決方案,但我已嘗試盡可能少地更改您的代碼:
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a string");
// use a StringBuilder to delete chars later on
StringBuilder x = new StringBuilder(input.nextLine().toUpperCase());
for(int i=0;i<x.length();i++) {
int count=1;
char find = x.charAt(i);
// go through the rest of the string from the end so we do not mess up with the index
for(int j=x.length()-1;j>i;j--) {
if(find == x.charAt(j)) {
count++;
// delete counted occurences of the same char
x.deleteCharAt(j);
}
}
System.out.printf("%c\t%d",x.charAt(i),count);
System.out.println();
}
}
我更喜歡的Java 流如下所示:
input.nextLine().toUpperCase().chars()
.mapToObj(i -> (char) i)
.collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))
.forEach((k, v) -> System.out.println(k + "\t" + v));
添加回答
舉報