Java 如何查找字符串中最常用的字符
我有一个简短的问题。如何在Java中找到字符串中最常见的字符。我从逻辑上知道如何做,但我不确定我的语法是否正确:Java 如何查找字符串中最常用的字符,java,string,Java,String,我有一个简短的问题。如何在Java中找到字符串中最常见的字符。我从逻辑上知道如何做,但我不确定我的语法是否正确: public class HelloWorld { public static void main(String[] args){ String votes = "ABBAB"; char[] StoringArray = votes.toCharArray(); int numOFB = 0; int numOFA = 0; i
public class HelloWorld {
public static void main(String[] args){
String votes = "ABBAB";
char[] StoringArray = votes.toCharArray();
int numOFB = 0;
int numOFA = 0;
if (StoringArray.contains("A")) {
numOFA++;
} else if (StoringArray.contains("B")) {
numOFAB++;
}
if (numOFA = numOFB) {
System.out.println("Tie");
} else if (numOFA > B) {
System.out.println("A");
} else {
System.out.println("B");
}
}
}
有谁能帮助我在Java中正确地做到这一点吗?正如评论所说;看起来你在计算A或B的数目,而不是最长的子串。你只分析由a和B组成的字符串吗 此外,当您应该使用==时,您正在使用=检查是否相等。我建议使用像Eclipse这样的IDE,它会在您执行此操作时向您显示
编辑:另外,您没有在数组中循环。您只是检查字符串是否包含A或B,如果包含,则添加1。您需要在整个数组中循环。您不能将字符数组与字符串进行比较,下面的逻辑应该可以工作,并为您提供所需的内容:
public static void main(String[] args){
String votes = "ABBAB";
char[] storingArray = votes.toCharArray();
int numOFB = 0;
int numOFA = 0;
for(char c : storingArray) {
if(c == 'A') {
numOFA++;
}
if(c == 'B') {
numOFB++;
}
}
if (numOFA == numOFB) {
System.out.println("Tie");
} else if (numOFA > numOFB) {
System.out.println("A");
} else {
System.out.println("B");
}
}
代码中有几个错误:
。您应该使用==
进行比较
contains
方法进行比较。它应该用于字符串
对象事实上,我正在使用它,我发现这是最好的方法:
String votes = "ABBAB";
char[] StoringArray = votes.toCharArray();
int B = 0;
int A = 0;
for (int i = 0; i < StoringArray.length; i ++) {
if (StoringArray[i] == 'A') {
A++;
} else if (StoringArray[i] == 'B') {
B++;
}
}
if (A == B) {
System.out.println("Tie");
} else if (A > B) {
System.out.println("A");
} else {
System.out.println("B");
}
String votes=“abab”;
char[]StoringArray=投票数。toCharArray();
int B=0;
int A=0;
对于(int i=0;iB){
系统输出打印项次(“A”);
}否则{
系统输出打印项次(“B”);
}
我会给你一个更抽象的解决方案:
public class Counter{
private char c;
private int count;
Counter(char c, int count){
this.c=c;
this.count=count;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public int getCount() {
return count;
}
public void addOcurrence() {
this.count++;
}
@Override
public boolean equals(Object obj) {
if(obj!=null)
if(((Counter)obj).getC()== this.c)
return true;
return false;
}
}
public static void main(String[] args){
String votes = "whateveryouwanttoputhereorcanbefromaparameter";
char[] storingArray = votes.toCharArray();
List<Counter> listCounter = new ArrayList<Counter>();
for(char aChar : storingArray){
Counter compareCounter = new Counter(aChar,1);
if(listCounter.contains(compareCounter)){
listCounter.get(listCounter.indexOf(compareCounter)).addOcurrence();
}else{
listCounter.add(compareCounter);
}
}
Counter max = listCounter.get(0);
for( Counter c : listCounter){
if(c.getCount() > max.getCount()){
max = c;
}
}
System.out.println("the character with more ocurrence is: "+max.getC());
}
公共类计数器{
私有字符c;
私人整数计数;
计数器(字符c,整数计数){
这个.c=c;
这个.count=count;
}
公共字符getC(){
返回c;
}
公共无效setC(字符c){
这个.c=c;
}
public int getCount(){
返回计数;
}
public void addOcurrence(){
这个.count++;
}
@凌驾
公共布尔等于(对象obj){
如果(obj!=null)
if(((计数器)obj.getC()==this.c)
返回true;
返回false;
}
}
公共静态void main(字符串[]args){
String voates=“whateveryouwanttoputhere或canbeflomaparameter”;
char[]storingArray=投票数。toCharArray();
List listCounter=new ArrayList();
用于(char aChar:storingArray){
计数器比较计数器=新计数器(aChar,1);
if(listCounter.contains(compareCounter)){
get(listCounter.indexOf(compareCounter)).addOcurrence();
}否则{
添加(比较计数器);
}
}
计数器最大值=listCounter.get(0);
用于(计数器c:listCounter){
如果(c.getCount()>最大getCount()){
max=c;
}
}
System.out.println(“出现频率较高的字符是:“+max.getC()”);
}
看起来您是在测试特定字符的频率,而不是子字符串。使用子字符串是什么意思?你是说性格吗?任何合适的IDE都可以轻松验证语法。使用==运算符检查是否相等,numOFA=numOFB正在将numOFB分配给NUMOFAI是否可以只给显然是家庭作业问题的代码?@DanielPaczuskiBak他似乎是新手,因此更正了代码并解释了他做错了什么。是的,但是你只想知道最常见的字符,知道域名?因为如果你不知道的话。这更复杂。看看我的答案。