我需要在java中编写一个代码,它将输入作为用户的字符串,并打印每个字母表的重复次数。我已经编写了代码但没有得到正确的输出。
input:ppooj
output:p1,o2,j1
我的代码是:
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello");
System.out.println("ENTER ANY STRING");
Scanner sc= new Scanner(System.in);
String[] arr= new String [5];
for(int i=0; i<5 ;i++ )
{
arr[i]= sc.next();
// getting input
}
for ( int i=0;i<5;i++){
System.out.print(""+ arr[i]);
}
int count=1;
int rep=0;
int i=0;
for ( i=0;i<5;i++)
{
//traverse
System.out.println("in first loop" + ""+ arr[i]);
for(int k=i+1; k<5;k++)
{
System.out.println("" + arr[k]);
//matching with each and every one
if(arr[i]==arr[k])
{
count++;
System.out.println("got the match" + count);
}
}
System.out.println(arr[i]+count+",");
count=1;
}
}
}
答案 0 :(得分:1)
您可以按照以下步骤操作。
char[]
)String
char[]
,您可以使用Map<Character,Integer>
来存储字符与出现次数。 答案 1 :(得分:0)
如果您只使用字母,请尝试使用此方法
采用大小为26的数组
将数组赋值为0
让索引为字母表位置,如0-a,1-b ... 25-z
遍历输入字符串并增加相应的索引位置,如
array[inputString.charAt(i)-'a']++;
相应地打印结果
答案 2 :(得分:0)
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class AlphaCount {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string");
String str = sc.nextLine();
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] chArray = str.toCharArray();
for(char c : chArray){
if(map.containsKey(c)){
map.put(c, map.get(c)+1);
}
else{
map.put(c, 1);
}
}
for (Entry<Character, Integer> entry : map.entrySet())
{
System.out.print(entry.getKey() + "" + entry.getValue()+" ");
}
}
}
答案 3 :(得分:0)
使用equals方法比较参考对象的值。有时它会在堆中被攻击。所以,最好在&#34; ==&#34;上使用equals方法。同时比较参考对象的值。
数组是一个引用类型对象。
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello");
System.out.println("ENTER ANY STRING");
Scanner sc= new Scanner(System.in);
String[] arr= new String [5];
for(int i=0; i<5 ;i++ )
{
arr[i]= sc.next();
// getting input
}
for ( int i=0;i<5;i++){
System.out.print(""+ arr[i]);
}
int count=1;
int rep=0;
int i=0;
for ( i=0;i<5;i++)
{
//traverse
// System.out.println("in first loop" + ""+ arr[i]);
for(int k=i+1; k<5;k++)
{
// System.out.println("" + arr[k]);
//matching with each and every one
if(arr[i].equals(arr[k]))
{
count++;
System.out.println("got the match" + count);
}
}
System.out.println(arr[i]+count+",");
count=1;
}
}
}
试试这段代码。您可以根据应用程序中的要求对其进行修改。
答案 4 :(得分:0)
您可以尝试使用字符串映射作为关键字:
Map<String,Integer> map = new HashMap<String,Integer>();
// set value = 0 to characters from a-z.
for( int i = 'a'; i < 'z'; i++ ){
map.put(String.valueOf((char)i), 0);
}
// supposed you have this as your input array. This should be read from file.
String[] arr= {"p","p","o","o","j"};
// count the duplicated characters.
for(int i=0;i<arr.length;i++){
map.put(arr[i],map.get (arr[i])+1);
}
// remove duplicated characters in array.
List<String> list= new ArrayList<String>(new LinkedHashSet<String>(Arrays.asList(arr)));
// print result.
for (String string : list) {
System.out.print(string+map.get(string));
}