编写一个程序,该程序使用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
答案 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()
将代表字符串中的字符总数。因此,现在循环将迭代字符串的所有字符。