подсчет определенных символов в строке (Java)
у меня есть домашнее задание для подсчета конкретных символов в строке.
например: string = "America"
выход должен быть = a appear 2 times, m appear 1 time, e appear 1 time, r appear 1 time, i appear 1 time and c appear 1 time
public class switchbobo {
/**
* @param args
*/ // TODO Auto-generated method stub
public static void main(String[] args){
String s = "BUNANA";
String lower = s.toLowerCase();
char[] c = lower.toCharArray(); // converting to a char array
int freq =0, freq2 = 0,freq3 = 0,freq4=0,freq5 = 0;
for(int i = 0; i< c.length;i++) {
if(c[i]=='a') // looking for 'a' only
freq++;
if(c[i]=='b')
freq2++;
if (c[i]=='c') {
freq3++;
}
if (c[i]=='d') {
freq4++;
}
}
System.out.println("Total chars "+c.length);
if (freq > 0) {
System.out.println("Number of 'a' are "+freq);
}
}
}
код выше-это то, что я сделал, но я думаю, что нет смысла иметь 26 переменных (по одной для каждой буквы). У вас есть альтернативный результат?
8 ответов
очевидно, ваша интуиция наличия переменной для каждой буквы верна.
проблема в том, что у вас нет автоматизированного способа выполнять одну и ту же работу с разными переменными, у вас нет тривиального синтаксиса, который помогает вам выполнять одну и ту же работу (подсчет одной частоты символов) для 26 различных переменных.
Так что вы могли бы сделать? Я намекну вам на два решения:
- вы можете использовать массив (но вам нужно будет найти способ отображения характер
a-z
индекс0-25
, что как-то тривиально, вы рассуждаете о кодировке ASCII) - можно использовать
HashMap<Character, Integer>
который является ассоциативным контейнером, который в этой ситуации позволяет вам сопоставлять числа с определенными символами, чтобы он идеально соответствовал вашим потребностям
можно использовать HashMap
символьного ключа и целочисленного значения.
HashMap<Character,Integer>
повторите строку
-if the character exists in the map get the Integer value and increment it.
-if not then insert it to map and set the integer value for 0
это псевдо-код, и вы должны попробовать его кодировать
Я использую HashMap для решения.
import java.util.*;
public class Sample2 {
/**
* @param args
*/
public static void main(String[] args)
{
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
String test = "BUNANA";
char[] chars = test.toCharArray();
for(int i=0; i<chars.length;i++)
{
if(!map.containsKey(chars[i]))
{
map.put(chars[i], 1);
}
map.put(chars[i], map.get(chars[i])+1);
}
System.out.println(map.toString());
}
}
Произведен Выход - {U=2, A=3, B=2, N=3}
В продолжение ответа Джека, следующий код может быть ваше решение. Он использует массив an для хранения частоты символов.
public class SwitchBobo
{
public static void main(String[] args)
{
String s = "BUNANA";
String lower = s.toLowerCase();
char[] c = lower.toCharArray();
int[] freq = new int[26];
for(int i = 0; i< c.length;i++)
{
if(c[i] <= 122)
{
if(c[i] >= 97)
{
freq[(c[i]-97)]++;
}
}
}
System.out.println("Total chars " + c.length);
for(int i = 0; i < 26; i++)
{
if(freq[i] != 0)
System.out.println(((char)(i+97)) + "\t" + freq[i]);
}
}
}
это даст следующий результат:
Total chars 6
a 2
b 1
n 2
u 1
int a[]=new int[26];//default with count as 0
for each chars at string
if (String having uppercase)
a[chars-'A' ]++
if lowercase
then a[chars-'a']++
public class TestCharCount {
public static void main(String args[]) {
String s = "america";
int len = s.length();
char[] c = s.toCharArray();
int ct = 0;
for (int i = 0; i < len; i++) {
ct = 1;
for (int j = i + 1; j < len; j++) {
if (c[i] == ' ')
break;
if (c[i] == c[j]) {
ct++;
c[j] = ' ';
}
}
if (c[i] != ' ')
System.out.println("number of occurance(s) of " + c[i] + ":"
+ ct);
}
}
}
возможно, вы можете использовать это
public static int CountInstanceOfChar(String text, char character ) {
char[] listOfChars = text.toCharArray();
int total = 0 ;
for(int charIndex = 0 ; charIndex < listOfChars.length ; charIndex++)
if(listOfChars[charIndex] == character)
total++;
return total;
}
например:
String text = "america";
char charToFind = 'a';
System.out.println(charToFind +" appear " + CountInstanceOfChar(text,charToFind) +" times");
Count char 'l' в строке.
String test = "Hello";
int count=0;
for(int i=0;i<test.length();i++){
if(test.charAt(i)== 'l'){
count++;
}
}
или
int count= StringUtils.countMatches("Hello", "l");