/*
基本思路:
将符合要求的字符串先拼接在一起,拼接完成后以拼接符进行分割即可。
*/
import java.util.*;
public class Test01
{
public static void main(String[] args)throws Exception//为了简单,将所有的异常都上抛。
{
String[] strarr={"a","abc","acb","bca","xt","xyz","aa","aa","ABC","BAC","AcB"};
String[][] strarr1=stringArrSplit(strarr);
System.out.println("按要求分组后的二维数组:"+Arrays.deepToString(strarr1));
}
static boolean isSame(String str1,String str2)//判断两个字符串是否符合要求的静态方法
{
if(str1.length()!=str2.length())return false;
char[] chararr1=str1.toCharArray();
Arrays.sort(chararr1);
char[] chararr2=str2.toCharArray();
Arrays.sort(chararr2);
if((String.valueOf(chararr1)).equals(String.valueOf(chararr2)))return true;
return false;
}
static String[][] stringArrSplit(String[] strarr)//返回值是按要求分组后的二维数组。
{
String str=null;//临时变量
for(int i=0;i<strarr.length;i++)
{
if(strarr[i]!="@")
{str=strarr[i];
for(int j=i+1;j<strarr.length;j++)
{
while(isSame(str,strarr[j]))//如果两个字符串符合要求的话,进行拼接
{
strarr[i]=strarr[i]+"-"+strarr[j];
strarr[j]="@";
break;
}
}
}
}
System.out.println("拼接后的一维数组:"+Arrays.deepToString(strarr));
int len=0;//返回值数组的长度初始化为0.
for(String data:strarr)
{
if(data!="@")len++;
}
String[][] reV=new String[len][];
int pointer=0;
for(String data:strarr)
{
if(data!="@")reV[pointer++]=data.split("-");//对凭借后的字符串进行切割
}
return reV;//返回分组后的二维数组
}
}
/*运行结果:
拼接后的一维数组:[a, abc-acb-bca, @, @, xt, xyz, aa-aa, @, ABC-BAC, @, AcB]
按要求分组后的二维数组:[[a], [abc, acb, bca], [xt], [xyz], [aa, aa], [ABC, BAC]
, [AcB]]
*/