急!java 分割字符串后再统计相同字符串个数

import java.util.*;
class P
{
P()
{
StringTokenizer s = new StringTokenizer("I am I am a student");
int x =s.countTokens();
String ss[] = new String [x];
int a [] = new int [x];
for(int k = 0;k<x;k++)
{
a[k] = 1;
} //初始化每个a数组中数为1

for(int i = 0;i<x;i++)
{
ss[i] = s.nextToken();
for(int j=i+1;j<x;j++)
{
if(ss[j]==(ss[i])) //用equal to就什么也输不出来.为什么?
{
a[i]+=1;
a[j]+=1;
}
}

}//比较的方法。可是从运行结果全是1来看 方法有问题。可是错在哪里。j应该从i的右侧取得吧,因为左侧已经比较过了
for(int l = 0;l<x;l++)
{
System.out.println(a[l]); //输出统计好个数的数组
}

}
public static void main(String args[])
{
new P();
}
}
高手们帮帮我吧!!!!!我已经头大了。

for(int i = 0;i<x;i++)
{
ss[i] = s.nextToken();
for(int j=0;j<i;j++)
{
if(ss[j].equals(ss[i]))
{
a[i]+=1;
a[j]+=1;
}
}
}

把中间这段改成这样,不知道是不是你想要的效果
中间if()比较里面判断字符串是否相等不能直接==的,==对比的是内存物理地址,应该用equal方法。之所以你前面equal方法报错,是因为ss[]中中存在null值,运行时报错。

这里的问题主要是你没梳理清双层for循环的i,j控制,以及==和equal的用法
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-22
for (int j = 0; j < i; j++) {
if (ss[j].equals(ss[i])) // 用equal to就什么也输不出来.为什么?
{
a[i] += 1;
a[j] += 1;
}
}
应该这样循环
原因:得到一个字符串就循环和它前面的(而不是后面的)字符串比较,用equal方法本回答被网友采纳
第2个回答  2012-11-22
比较string的话把ss[j]==(ss[i])换成ss[j].equals(ss[i])
==比的是string的memory地址,所以不会报错,但是意思不对
.equals比的是string实际的数值
第3个回答  2012-11-23
import java.util.*;
class P
{
P()
{
StringTokenizer s = new StringTokenizer("I am I am a student");
int x =s.countTokens();
String ss[] = new String [x];
int a [] = new int [x];
for(int k = 0;k<x;k++)
{
a[k] = 1;
} //初始化每个a数组中数为1

for(int i = 0;i<x;i++)
{
ss[i] = s.nextToken();

}//比较的方法。可是从运行结果全是1来看 方法有问题。可是错在哪里。j应该从i的右侧取得吧,因为左侧已经比较过了
for(int i=0;i<x;i++){
for(int j=i+1;j<x;j++)
{
if(ss[j].equals(ss[i])) //用equal to就什么也输不出来.为什么?
{
a[i]+=1;
a[j]+=1;
}
}
}
for(int l = 0;l<x;l++)
{
System.out.println(a[l]); //输出统计好个数的数组
}

}
public static void main(String args[])
{
new P();
}
}

ss[j]还没赋值就拿去跟ss[i]比较了啊
直接先把ss数组都赋值完就可以进行下面两层for进行匹配了

其实没必要用StringTokenizer类吧,直接split(" ")不就行了?
相似回答