split() 关键字如何?什么是更简单的将 String 转换为 String[](array)?

How Does split() keyword ?? What is a simpler convert String into String[](array)?

大厨在一张纸上写了一些文字,现在他想知道文字中有多少个洞。什么是洞?如果你把纸想象成一个平面,把一个字母想象成平面上的一条曲线,那么每个字母都会把平面分成几个区域。例如字母"A"、"D"、"O"、"P"、"R"将平面分成两个区域,所以我们说这些字母各有一个孔。同样,字母 "B" 有两个孔,而 "C"、"E"、"F"、"K" 等字母则没有孔。我们说文本中的空洞数等于文本中字母的总空洞数。帮助 Chef 确定文本中有多少个孔。输入

第一行包含一个整数T <= 40,测试用例的数量。接下来是 T 个测试用例。每个测试用例的唯一行包含仅由英文字母大写字母组成的非空文本。文本长度小于 100。输入中没有任何空格。输出

对于每个测试用例,输出一行包含相应文本中的孔数。示例

输入:2 CODECHEF DRINKEATCODE

输出:2 5

我的程序没有按预期运行。我认为它应该可以正常工作,但是不管使用的 if 条件如何,它都将计数器值显示为 0。

import java.util.Scanner;

public class holes {


    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int t;
        String[][] array = new String[40][100];
        int[] counter = new int[40];

        System.out.println("Enter The Test Cases");
        t = scan.nextInt();

        for(int w =0; w<t;w++ ){
            String input = scan.next();
            array[w] = input.split("(?!^)");

            for(int a=0;a<array[w].length;a++ ){

                if(array[w][a] =="A"||array[w][a] =="P"||array[w][a] =="D"||array[w][a] =="O"||array[w][a] =="R"){
                    counter[w]++;
                    System.out.println(array[w][a]);
                }
                else if(array[w][a]=="B"){
                    counter[w]=counter[w]+2;
                    System.out.print(counter[w]+"\n");
                }
            }

        }


        for(int e=0;e<t;e++ ){
            System.out.println(counter[e]);
        }
        scan.close();
    }

}

您应该将代码拆分为方法以使其更简单。例如,有一种方法可以计算一个字符串的孔数:

private static int countHoles(String s) {
    int count = 0;
    for (char c : s.toCharArray()) {
        if ("ADOPQR".indexOf(c) != -1) {
            count++;
        } else if (c == 'B') {
            count += 2;
        }
    }
    return count;
}

// or:

private static int countHoles(String s) {
    return s.chars().map(c -> c == 'B' ? 2 : "ADOPQR".indexOf(c) != -1 : 1 : 0).sum();
}

然后你可以只打印来自 countHoles 的每个输入的结果,你可以简单地使用 split(" "),而不是将它们存储在数组中。