我有一个实验室,它涉及计算字符串中的数字位数和数字字母。我实际上有从我的java书中计算字母的方法,所以我仍然不太确定它是如何工作的,但是当我试图重新创建该方法但是对于实验室的数字部分时,输出是错误的。如果有人能指出我正确的方向,我会非常感激。
正确的输出应为:
1-800-鲜花
e出现1次
f出现1次
l出现1次
o出现1次
r出现1次
出现1次
w出现1次
0出现2次
1出现1次
8出现1次
建立成功(总时间:6秒)
我得到的输出是: 输入字符串:
1-800-鲜花
e出现1次
f出现1次
l出现1次
o出现1次
r出现1次
出现1次
w出现1次
0出现1次
1出现1次
2出现1次
3出现1次
4出现0次
5出现0次
6出现0次
7出现0次
8出现0次
9出现0次
建立成功(总时间:6秒) 公共课Lab12 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String s = new String("");
System.out.println("Enter a string: ");
s = input.nextLine();
int[] counts = countletters(s.toLowerCase());
for (int i =0; i < counts.length; i++){
if (counts[i] != 0){
System.out.println((char)('a' + i) + " appears " + counts[i] + ((counts[i] == 1? " time": " times")));
}
}
System.out.println("");
int[] counts2 = countDigits(s);
for (int i = 0; i <counts2.length; i++){
System.out.println(i + " appears " + counts2[i] + " times " );
}
}
public static int[] countDigits(String s){
int[] counts = new int[10];
for (int i = 0; i <s.length(); i++){
if (Character.isDigit(s.charAt(i))){
counts[(int)s.charAt(i - '0')]++;
}
}
return counts;
}
public static int[] countletters(String s){
int[] counts = new int[26];
for(int i = 0; i < s.length(); i++){
if (Character.isLetter(s.charAt(i))){
counts[(s.charAt(i) - 'a')]++;
}
}
return counts;
答案 0 :(得分:2)
问题出在这一行:
counts[i]++;
应该是:
counts[(int)s.charAt(i) - '0']++;
答案 1 :(得分:1)
您可以“以这种方式计算字符串中的数字出现次数”
string[] digits = Regex.Split(input, @"\D+");
int i = digits.length;
编辑:问题首先用C#标记!!
这是java等价物:
String Input = "Count the 15 number of 454 digits 12";
String[] s = Input.split("\\D+");
System.out.println(s.length-1);
答案 2 :(得分:1)
问题出在这一行:
counts[i]++;
应该是:
int offset = (int)'0';
counts[(int)s.charAt(i) - offset]++;
因为您应该为找到的数字递增计数器,而不是字符串中的位置。