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(" ")
,而不是将它们存储在数组中。
大厨在一张纸上写了一些文字,现在他想知道文字中有多少个洞。什么是洞?如果你把纸想象成一个平面,把一个字母想象成平面上的一条曲线,那么每个字母都会把平面分成几个区域。例如字母"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(" ")
,而不是将它们存储在数组中。