计数器不能同时针对大写字符和小写字符进行计数

时间:2019-02-07 04:32:47

标签: java

编写一个程序,该程序使用Scanner对象首先读取一个表示String数组大小(n)的数字。创建一个使用第一个数字作为大小的字符串数组。然后,您将在同一行中读入(n)个城市,并将它们存储在数组中。最后,您将读取一个字符(与城市相同的行)。然后,程序将遍历城市阵列,并在屏幕上显示char在城市中的次数。确保处理大小写(A!= a)。

import java.util.Arrays;
import java.util.Scanner;
public class Problem1 {

    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
        int length = scanner.nextInt();
        String myarray[] = new String[length];
        char ch;


        for (int i = 0; i < myarray.length; i++) {
            myarray[i]=scanner.next();
         }

    ch= scanner.next().charAt(0);
    char ch1= Character.toUpperCase(ch);
    char ch2= Character.toLowerCase(ch);
    for(int y=0; y<myarray.length; y++){
      int counter=0;
      for(int z=0; z<myarray.length; z++){

        if(myarray[y].charAt(z)==ch1){
          counter++;
        }else if(myarray[y].charAt(z)==ch2){
          counter++;
        }
      }
      System.out.print(counter+" ");
    }
  }
}

示例输入:

  

4

     

多伦多哈利法克斯·特鲁罗·渥太华

示例输出:

  

2 0 1 2

我的输出:

  

1 0 1 2

3 个答案:

答案 0 :(得分:1)

要计算必需字符忽略大小写的数量,可以对字符串中的字符和必需字符使用Character.toLowerCase()。进行str.toLowerCase()时是相同的,但是没有创建新的字符串。

对于此计数任务,您不需要修改字符串(例如str.replaceAll())。通常,您的方法很好,但是在for循环中有一些错误。

public class Problem {

    public static void main(String... args) {
        try (Scanner scan = new Scanner(System.in)) {
            int[] count = count(readCities(scan), readChar(scan));
            System.out.println(Arrays.stream(count)
                                     .mapToObj(Integer::toString)
                                     .collect(Collectors.joining(" ")));
        }
    }

    private static String[] readCities(Scanner scan) {
        String[] cities = new String[scan.nextInt()];

        for (int i = 0; i < cities.length; i++)
            cities[i] = scan.next();

        return cities;
    }

    private static char readChar(Scanner scan) {
        return scan.next().charAt(0);
    }

    private static int[] count(String[] cities, char ch) {
        int[] count = new int[cities.length];

        for (int i = 0; i < cities.length; i++)
            for (int j = 0; j < cities[i].length(); j++)
                if (Character.toLowerCase(cities[i].charAt(j)) == Character.toLowerCase(ch))
                    count[i]++;

        return count;
    }
}

答案 1 :(得分:0)

首先,通常最好使用//和/ *文本* /

进行注释

第二,您的计数器不起作用,因为您只计数到数组的长度,而不是字符串的长度,而是使用'String.replaceAll(String,String);'和“ String.length()”就可以算出来。

会给您的字符计数器一个错误。

输入:2 A B t

使用变量

•长度(整数)

•myarray(String [])

•ch(字符)

int[] countChar(int length, String[] myarray, char ch){
    int[] result = new int [length]; // Method returns int[] result
    for(int i=0; i<length; i++){
        result[i] = myarray[i].length -
                        myarray[i].replaceAll(ch+"", "").length;
    }
    return result;
}

代码像这样对String中的char进行计数。担心大写和小写?在输入中使用String.toLowerCase()和.toUpperCase()。

[字符串长度]-[替换字符后的字符串长度]

查看评论有时会很有帮助。看看戴夫的,就会发现错误。

答案 2 :(得分:0)

for(int z=0; z<myarray.length; z++){

如下更改上述for循环

for(int z=0; z<myarray[y].length(); z++){

myarray.length代表输入字符串的总数(4),即循环将迭代到第4个字符或一个字符串,因此第一个字符串是“ Toronto”,并且循环将迭代直到剩余的'o'秒不会重复。

myarray[y].length()将代表字符串中的字符总数。因此,现在循环将迭代字符串的所有字符。