java中一个字符串数组如何去掉指定位数的重复项并计算不重复项有多少个

String str ="rgybrgbyrgybrbgyrbgybrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrgrybgrbygrybgyrbgyrbgbyrgbyrgbrygbyrgbyrgbryygrbygrbygrbygrbybgrybgrbrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrygrbygrbygrbygrbybgrybgr";
给定的字符串是上面这个,要求按每4个字母为一项进行比较,去掉重复项,并计算不重复项有多少个,打印出不重复项(不用换行),有高手请给出个答案来吧,小弟不胜感激

package test;

public class Test {

public static void main(String[] args) {//定义你的字符串
String str="rgybrgbyrgybrbgyrbgybrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrgrybgrbygrybgyrbgyrbgbyrgbyrgbrygbyrgbyrgbryygrbygrbygrbygrbybgrybgrbrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrygrbygrbygrbygrbybgrybgr";
String num[]=new String[str.length()/4+1];//定义一个数组,数组长度为 4个字母的个数
for(int i=0;i<num.length;i++){
num[i]=str.substring(i*4, (i+1)*4>str.length()?str.length():(i+1)*4);//将四个字母一组放入数组中
}
//开始比较数组内容是否有一致的
int sum=0;//计算有多少俱不同的
for(int i=0;i<num.length;i++){
boolean is=true;//比较原理:将其中的一个数和其它任意一个数进行比较
for(int j=i+1;j<num.length;j++){
if(num[i].equals(num[j])){
is=false;//如果相同了,就直接断掉循环,进行下一次的比较
break;
}
}
if(is){//只有和任意一个数都不相同才记录下来
sum++;
System.out.print(num[i]+" ");
}
}
System.out.println(" 共有"+sum+"个。");
}
}

//程序已经写好,可以成功运行,你试一下
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-20
package Test1;

import java.util.HashSet;
import java.util.Set;
public class strlength {
public static void main(String[] args) {
String str = "rgybrgbyrgybrbgyrbgybrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrgrybgrbygrybgyrbgyrbgbyrgbyrgbrygbyrgbyrgbryygrbygrbygrbygrbybgrybgrbrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrygrbygrbygrbygrbybgrybgr";
int n = str.length() / 4;
String[] s = new String[n];
System.out.println("共有" + n + "项");
for (int i = 0; i < n; i++) {
s[i] = str.substring(4 * i, 4 * i + 4);
}
Set<String> set = new HashSet<String>();
for(int j= 0;j<s.length;j++){
set.add(s[j]);
}
System.out.println("其中"+set.size()+"项不重复");
System.out.println(set);
}

}
第2个回答  2010-04-20
package baidu;
import java.util.HashSet;
import java.util.Set;
/*
* String str ="rgybrgbyrgybrbgyrbgybrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrgrybgrbygrybgyrbgy
rbgbyrgbyrgbrygbyrgbyrgbryygrbygrbygrbygrbybgrybgrbrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrygrbygrby
grbygrbybgrybgr";给定的字符串是上面这个,要求按每4个字母为一项进行比较,去掉重复项,并计算不重
复项有多少个,打印出不重复项(不用换行),有高手请给出个答案来吧,小弟不胜感激
*/

public class TestStr {

public static void main(String args[]){

String str ="rgybrgbyrgybrbgyrbgybrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrgrybgrbygrybgyrbgyrbgbyrgbyrgbrygbyrgbyrgbryygrbygrbygrbygrbybgrybgrbrgybgyrbgyrbgrybgyrbgyrbgrybygrbygrygrbygrbygrbygrbybgrybgr";
//按说这里应该判断一下,但是下面也要判断比较麻烦,因为正好str长184可分为46个字符串。所以在此图省力不写了
/* if(str.length()%4==0){
String arr[]=new String[str.length()/4];
}else{
String[] arr=new String[(str.length()/4)+1];
}*/
//初始化一个字符串数组 为46长度的 用来存放分割后的 字符串
String[] arr=new String[str.length()/4];
//给字符串数组赋值
for(int i=0;i<str.length();i=i+4){
arr[i/4]=str.substring(i,i+4);
}
//由于 set集合不允许存放重复的元素 所以可以直接把 数组元素放进set 自动去除重复元素(这里投机了 没写算法)
Set<String> set=new HashSet<String>();
for(String s:arr){
set.add(s);
}

System.out.println("不重复项的个数是:"+set.size());
System.out.print("不重复元素为");
for(String s:set){
System.out.print(":"+s);
}
}
}

运行结果:
不重复项的个数是:14
不重复元素为:rgyb:brgy:rgby:bgry:ybgr:grby:bygr:ygrb:gbry:bgyr:gryb:gyrb:gbyr:rbgy

我不知道你的意思 是重复元素全部去掉 还是 把重复的元素只留一个其他去掉。希望这个是正确的。
第3个回答  2010-04-20
貌似是 14个吧!
相似回答