如何在不重复打印的情况下计算字符串中字母的出现次数?
How to count the occurrences of a letter in a String without duplication in printing?
如果可能请运行代码
输入: "wooooow"
输出:
w:2
o:5
o:5
o:5
o:5
o:5
w: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
此答案仅适用于小写输入。对于大写字母,也使用大小为 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
您可以尝试这样的操作:
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) + " ");
}
}
}
这将打印以下行:
输入一个词
哇哦
w:2 o: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 转换为整数并将其用作数组的索引。您也可以执行此反向整数 -> char.
这将适用于您的字符集中的前 1024 个字符。通常这些都是大写、小写、数字和特殊字符。
你可以试试这样的
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+" ");
}
如果可能请运行代码
输入: "wooooow"
输出:
w:2
o:5
o:5
o:5
o:5
o:5
w: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
此答案仅适用于小写输入。对于大写字母,也使用大小为 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
您可以尝试这样的操作:
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) + " ");
}
}
}
这将打印以下行:
输入一个词
哇哦
w:2 o: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 转换为整数并将其用作数组的索引。您也可以执行此反向整数 -> char.
这将适用于您的字符集中的前 1024 个字符。通常这些都是大写、小写、数字和特殊字符。
你可以试试这样的
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+" ");
}