java - 查找字符串中每个数字出现的次数

标签 java

仅供引用。我坚持的另一个练习。问题是找出字符串中每个数字出现的次数。我觉得我已经很接近了,但我得到了一些奇怪的结果。我是初学者,所以如果可能的话,请在我的水平上保留提示/帮助。谢谢!

这是我到目前为止所拥有的:

import java.util.Scanner;

    public class Practice5 {
 public static void main(String[] args) {
  Scanner input= new Scanner(System.in);
  System.out.println("Enter a string");
  String s = input.next();

  int[] counts = countNumbers(s);

  String output = "";

  for (int i = 0; i < counts.length; i++) {
   if (counts[i] != 0)
                        {
           output += "Digit" + (char)('0' + i) + " appears " +
           counts[i] + ((counts[i] == 1) + " times\n");
                        }

           }

                System.out.print(output);
           }


 private static int[] countNumbers(String s) {
  int[] counts = new int[10];

  for(int i = 0; i < s.length(); i++) {
   if (Character.isDigit(s.charAt(i)));
   counts[s.charAt(i) - '0']++;
  }
  return counts;
 }
}

好的。现在,如果我输入类似“23 t5t6 u76u 232 g1”的字符串

我得到:

2 appears 1 time
3 appears 1 time

这显然是不正确的。应该是 2 出现 3 次,3 出现 2 次,5 出现 1 次,等等。如有任何帮助,我们将不胜感激。

最佳答案

您的第一个问题是 Java 扫描器的使用。如果我没记错的话,您只是读取第一个子字符串直到第一个空格。您可能想要遍历整个字符串,因此扫描仪不适合使用。

一旦你得到了整个字符串,你仍然有一个问题。 代码中的主要问题是在读取

的行中
if (Character.isDigit(s.charAt(i)));

最后有一个分号。 因此,始终会执行下一行(更新值的位置)。这是一个问题,因为有时您的字符不是数字,因此索引“character-'0'”可能会超出您定义的 10。 Java 应该捕获此异常以创建异常。您没有看到此异常,因为您的代码只会处理第一个“23”

关于java - 查找字符串中每个数字出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226333/

相关文章:

java - 如何更改Spring Cloud GCP的依赖版本

java - Java中的正则表达式?

java - Mockito 验证未失败

java - 我们什么时候应该使用远程过程调用?

Java ECC Brainpool 支持证书吗?

java - 在selenium中读取excel文件时出错

java - 使用 Apache POI 将 Excel/Word 转换为 PDF

java - 检查对象列表是否包含Java中的另一个对象

java - GUI 中的按钮、文本字段、标签布局

java - 在 GWT 中等待 CellTable 的数据