我的任务是编写一个程序,计算一个电话号码(仅数字)中数字重复的次数。这是我到目前为止的内容及其输出。
import java.util.Scanner;
public class PhoneNumber {
public static void main(String[] args) {
Scanner key= new Scanner(System.in);
String number;
int[] phoneArray = new int[10];
int one = 0;
System.out.println("Enter your phone number in the format (xxx)xxx-xxxx:");
number = key.nextLine();
for(int i = 0; i < phoneArray.length; i++) {
System.out.println("Count of " + i + "'s: " + number.charAt(i));
}
}
}
输出:
Enter your phone number in the format (xxx)xxx-xxxx:
(864)728-1638
Count of 0's: (
Count of 1's: 8
Count of 2's: 6
Count of 3's: 4
Count of 4's: )
Count of 5's: 7
Count of 6's: 2
Count of 7's: 8
Count of 8's: -
Count of 9's: 1
我不确定自己在做什么错。
答案 0 :(得分:3)
您尚未计算每个数字出现的次数。采用您开始的方法,您需要遍历字符串字符并增加数组的相关元素:
for (int i = 0; i < number.length(); ++i) {
char digit = number.charAt(i);
if (digit >= '0' && digit <= '9') {
phoneArray[i - '0']++;
}
}
答案 1 :(得分:2)
要提供“ stream-api”解决方案,请按照以下方法使用Collectors.groupingBy
:
Map<Character, Long> charsGrouped = IntStream.range(0, str.length())
.mapToObj(str::charAt)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
通过使用此解决方案,您只需遍历字符串并将每个字符分组并计算它们出现的次数。从那里很容易找到最常用的角色。
答案 2 :(得分:1)
通过从数字中消除该数字并从原始字符串的长度中减去剩余字符串的长度,可以找到数字中某个数字的出现。
编辑
因此,如果(115)855-4732是电话号码,则其长度为13。要计算1,请从该号码中删除所有1,然后得到(5)855-4732。现在,该字符串的长度为11。通过从13中减去11,可以得到2次出现的1s。
for (int i = 0; i < 10; i++) {
System.out.println("Count of " + i + "'s: " + (number.length() - number.replace("" + i, "").length()));
}