Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算电话号码中的数字_Java_String_Digits - Fatal编程技术网

Java 计算电话号码中的数字

Java 计算电话号码中的数字,java,string,digits,Java,String,Digits,我的任务是编写一个程序,计算一个电话号码中一个数字重复的次数(仅限数字)。这是我到目前为止所拥有的以及它的输出 import java.util.Scanner; public class PhoneNumber { public static void main(String[] args) { Scanner key= new Scanner(System.in); String number; int[] p

我的任务是编写一个程序,计算一个电话号码中一个数字重复的次数(仅限数字)。这是我到目前为止所拥有的以及它的输出

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));            
    }        
  }      
}

我不确定我做错了什么。

您没有计算每个数字出现的次数。采用您开始的方法,您需要迭代字符串字符并增加数组的相关元素:

for (int i = 0; i < number.length(); ++i) {
    char digit = number.charAt(i);
    if (digit >= '0' && digit <= '9') {
         phoneArray[i - '0']++;
    }
}
for(int i=0;i如果(数字>='0'&&digit,您可以通过从数字中删除该数字并从原始字符串的长度中减去剩余字符串的长度来查找数字中出现的数字。
编辑
因此,如果(115)855-4732是电话号码,则其长度为13。要计算1,请从号码中删除所有1,得到(5)855-4732。现在此字符串的长度为11。通过从13中减去11,可以得到2次1

for (int i = 0; i < 10; i++) {
    System.out.println("Count of " + i + "'s: " + (number.length() - number.replace("" + i, "").length()));
}
for(int i=0;i<10;i++){
System.out.println(““+i+”的计数:”+(number.length()-number.replace(“+i,”).length());
}

要提供“流api”解决方案,以下是使用
收集器的方法。groupingBy

Map<Character, Long> charsGrouped = IntStream.range(0, str.length())
    .mapToObj(str::charAt)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Map charsGrouped=IntStream.range(0,str.length())
.mapToObj(str::charAt)
.collect(Collectors.groupingBy(Function.identity()、Collectors.counting());

通过使用此解决方案,您只需在字符串上迭代并对每个字符进行分组,然后计算它们出现的次数。从中很容易找到最常用的字符。

好吧,您从来不会实际计算任何内容。
phoneArray
保持不变。首先,您似乎没有实际计算数字。具体问题是什么你有什么问题吗?你没有计算任何东西,你只是打印数组的前10个元素,从循环数组开始,就像你正在做的那样,你可以有另一个数组来存储每个数字的所有出现,根据你循环中的当前数,你只需要在那个时候增加计数数组最后,您只需循环计数数组并显示存储的数字,指出
charAt()也很重要
返回一个int,它返回字符的ASCII码,而不是像1、2、3等那样的数字。
1
的ASCII码是49 iirc。您必须将ASCII码转换为您想要的数字,并且还必须检查非数字的代码(如
-
)基本上,它考虑了字符串中的所有数字,并减去它不关注的数字。例如,在(863)738-3762中,如果试图找到3的数量,它将执行“10-7”?正确吗?