请尽可能运行代码
输入:"呜呜"
的输出:
宽:2
○:5
○:5
○:5
○:5
○:5
瓦特:2
我希望结果为: w:2 o:5
我已经尝试了几个ifs和循环来实现它,但我不能有它的语法吗?或任何东西
import java.util.Scanner;
public class test {
public static void main( String[] args ){
String sWord= new String();
int nCtr,nCtr2,nTemp=0,n,n1=0,n2=0,n3=0;
char cTemp=' ',cTemp2=' ';
Scanner input = new Scanner(System.in);
System.out.println("Enter a Word");
sWord = input.nextLine();
n = sWord.length();
char[] cArray = new char[n];
cArray = sWord.toCharArray();
for(int ctr=cArray.length;ctr>0;ctr--){
for(nCtr=0;nCtr<cArray.length;nCtr++){
if(cArray[nCtr]==sWord.charAt(n1)){
nTemp++;
}
}//for
cTemp = cArray[n2];
for(nCtr2=0;nCtr2<n;nCtr2++){
if(sWord.charAt(nCtr2)=='$'){
n3++;
}
}//for
System.out.println("# of occurence of " + cTemp + " is " + nTemp);
n1++;
n2++;
nTemp=0;
}//for minus
}//
}//class
答案 0 :(得分:1)
您可以尝试这样的事情:
import java.util.HashMap;
import java.util.Scanner;
public class test {
public static void main( String[] args ){
String sWord= new String();
Scanner input = new Scanner(System.in);
System.out.println("Enter a Word");
sWord = input.nextLine();
HashMap<Character, Integer> charCount = new HashMap<Character, Integer>();
for(Character c : sWord.toCharArray()) {
if(charCount.containsKey(c)) {
charCount.put(c, charCount.get(c)+1);
} else {
charCount.put(c, 1);
}
}
for(Character key : charCount.keySet()) {
System.out.print(key + ":" + charCount.get(key) + " ");
}
}
}
这将打印以下行:
输入Word
wooooow
w:2:5:
适用于大写字母,小写字母,数字字母......您可以保存在字符串中的所有内容。
编辑: 不使用HashMap:
public static void main( String[] args ){
String sWord= new String();
Scanner input = new Scanner(System.in);
System.out.println("Enter a Word");
sWord = input.nextLine();
int[] cArr = new int[1024];
for(char c : sWord.toCharArray()) {
if((int) c <= cArr.length) {
cArr[(int) c]++;
}
}
for(int x = 0; x < cArr.length; x++) {
if(cArr[x] > 0) {
System.out.print((char) x + ":" + cArr[x]);
}
}
}
这是有效的,因为您可以将char转换为整数并将其用作数组的索引。你也可以做这个反向整数 - &gt;炭。
这适用于Charset中的前1024个Chars。 Normaly theese都是大写,小写,数字和特殊字符。
答案 1 :(得分:0)
此答案仅适用于小写输入。对于大写,也可以使用大小为46的数组。
您必须通过创建新数组或其他数据结构来自行跟踪事件。另外,我不认为你的循环非常有效。
import java.util.Scanner;
public class Temp {
public static void main( String[] args ){
String sWord= new String();
int nCtr,nCtr2,nTemp=0,n,n1=0,n2=0,n3=0;
char cTemp=' ',cTemp2=' ';
Scanner input = new Scanner(System.in);
System.out.println("Enter a Word");
sWord = input.nextLine();
n = sWord.length();
char[] cArray = new char[n];
cArray = sWord.toCharArray();
int[] countsOfChars = new int[26];
for(int ctr=cArray.length;ctr>0;ctr--){
for(nCtr=0;nCtr<cArray.length;nCtr++){
if(cArray[nCtr]==sWord.charAt(n1)){
nTemp++;
}
}//for
cTemp = cArray[n2];
for(nCtr2=0;nCtr2<n;nCtr2++){
if(sWord.charAt(nCtr2)=='$'){
n3++;
}
}//for
// System.out.println("# of occurence of " + cTemp + " is " + nTemp);
countsOfChars[cTemp - 'a'] = nTemp;
n1++;
n2++;
nTemp=0;
}//for minus
for(int i=0; i<26; i++){
if(countsOfChars[i] != 0) {
System.out.println("# of occurence of " + (char)('a'+i) + " is " + countsOfChars[i]);
}
}
}//
}//class
答案 2 :(得分:0)
您可以尝试这样的事情
string str = "wooooow";
Dictionary<char, int> table = new Dictionary<char, int>();
foreach (char ch in str.ToCharArray())
{
int count = 0;
if (table.TryGetValue(ch, out count))
{
table[ch] = count + 1;
}
else
{
table.Add(ch, 1);
}
}
foreach (var item in table)
{
Console.Write(item.Key + ":" + item.Value+" ");
}