是啥意思,比如字符串"a,b,$,$,$",就要得到“a,b,$”,“$,$,$”两个组合吗? 
遍历字符串
碰到a或者$时,
   去判断它下一个是否是b或者$并且再下一个是c或者$.
   都符合就扔到list,
   继续下一循环;
否者继续遍历下一个字符。

解决方案 »

  1.   

    不是,是输入a,b,c;然后要求用$和他们的组合。
      

  2.   

    //水平有限只能写成这样了....二进制没学好....
    public static void main(String[] args) {
    String strs = "abcasdsd";
    for(int i =0;i<=(1l<<strs.length())-1;i++){
    String stemp = "";
    //将二进制数全部转成000,101,011这种固定长度字符串
    String s = String.format("%"+strs.length()+"s", Integer.toBinaryString(i)).replaceAll(" ", "0");
    for(int j = 0;j<s.length();j++){
    if(s.toCharArray()[j] == '1'){
    stemp+="$";
    }else{
    stemp+=strs.toCharArray()[j];
    }
    }
    System.out.println(stemp);
    }
    }
      

  3.   

    循环,4个取3个.组成一个String 存在Set 容器.
      

  4.   

    比较笨,供楼主参考:import java.util.ArrayList;
    import java.util.List;public class ChangeCode {
    public static char specialChar = '$';//要替换的特殊字符。 public static void main(String[] arsg) {
    String s = "a,b,c,d,e";//测试字符串。
    //String s = "a,b,c";
    StringTreat st = new StringTreat(s,specialChar);//主处理类。
    List<String> listResult = st.getFinalString();
    for(String ss: listResult) {
    System.out.println(ss);
    }
    }
    }//处理字符串的类。
    //字符串必须是"a,b,c,d,e" 这样。
    class StringTreat {

    private String toBeTreated;
    private char repalcer;//要替换的特殊字符。

    public StringTreat(String toBeTreated, char repalcer) {
    this.toBeTreated = toBeTreated;
    this.repalcer = repalcer;
    }
    /**
     * 获得最终字符串,在list集合里。
     * @return List<String>
     */
    public List<String> getFinalString() {
    char[] c = getCharArray();//根据字符串形成字符数组。 如:"a,b,c" ---> ['a','b','c']
    int charLength = c.length;
    List<String> list = new ArrayList<String>();//保存结果。
    list.add(toBeTreated);//保存原字符串。 char[][] cc = null;
    for(int i = 1; i <= charLength - 1; i++) {//i = 1, 一个 $, i = 2, 二个$.
    cc = getAllStates(charLength,i);//需要替换i个特殊个字符。

    String[] ss = getString(cc, c);//转换成字符串。
    for(String s: ss) {
    list.add(s);
    }
    }
    //保存全部由替换字符组成的字符串.
    String temp = "";
    for(int i = 0; i < charLength ; i++) {
    if(i == charLength - 1 ) {
    temp += "" + repalcer ;
    }
    else {
    temp += "" +repalcer + ',';
    }
    }
    list.add(temp);

    return list;
    }

    /**
     * 把字符串去掉',',变成字符数组。
     * @return 字符数组。
     */
    public char[] getCharArray() {
    String[] s = toBeTreated.split(",");
    char[] result = new char[s.length];
    for(int i = 0 ; i < s.length ; i++) {
    result[i] = s[i].charAt(0);
    }
    return result;
    }

    /**
     * 形成特殊字符数组,参数n字符数组的长度,(由原字符串决定),m 是要替换的特殊字符个数。
     * 比如原字符串为{'a','b','c'},则字符3个,这里的n = 3. 假如m =1 , 就是要替换一个字符。
     * 即最终要得到:{'a','b','$'},{'a','$','c'},{'$','b','c'}
     * 那么这个方法返回一个二维数组 {{'0','0','$'},{'0','$','0'},{'$','0','0'}}
     * 后续方法把是'0'的地方,用原字符串相应位置字符替换,就得到了需要的字符串。
     * @param n
     * @param m
     * @return 所有的字符组合。
     */
    public char[][] getAllStates(int n, int m) { if(n <=1 || m < 1 || m >= n) {
    return null;
    }
    //初始化一个数组。n 个 0 , m个'$'.
    char[][] resultChars = new char[n][n];
    char[] origin = new char[n];
    for(int i = 0 ; i < n - m ; i ++ ){
    origin[i] = '0';
    }
    for(int i = n - m ; i < n ; i++) {
    origin[i] = repalcer;
    }
    //test
    /*
    for(int i = 0; i < n; i++) {
    System.out.println(origin[i] + " ");
    }
    */
    resultChars[0] = origin;
    for(int i = 1; i < n; i++) {
    resultChars[i] = getShiftChars(origin, i);
    }
    return resultChars;
    }
    /**
     * 把数组里的非特殊字符,用原字符串的字符替换。形成一个字符串数组。
     * @param c1
     * @param c2
     * @return
     */
    public String[] getString(char[][] c1 , char[] c2) {

    String[] s = new String[c1.length];
    char[] temp = new char[c2.length];
    for(int i = 0 ; i < c1.length; i++) {
    for(int j = 0 ; j < c1[i].length; j++) {
    if(c1[i][j] == '0' ) {
    temp[j] = c2[j];
    }
    else {
    temp[j] = c1[i][j];
    }
    }
    StringBuffer sb = new StringBuffer();
    for(int k = 0 ; k < temp.length; k++) {
    if(k != temp.length - 1) {
    sb.append(temp[k]);
    sb.append(',');
    }
    else {
    sb.append(temp[k]);
    }
    }
    s[i] = sb.toString();
    }
    return s;
    }


    /**
     * 字符数组变换,比如c = {'0','0','0','$','$'}, length = 1, 则得到 {'0','0','$','$','0'};
     * length = 2, 得到{'0','$','$','0','0'} .
     * length 从1 到c的长度-1。
     * @param c
     * @param length
     * @return
     */
    public char[] getShiftChars(char[] c, int length) {

    char[] cc = new char[c.length];
    /*
    for(int j = length, i = 0; j < c.length ; j++, i++) {
    cc[i] = c[j];
    }
    for(int j = 0, i = c.length - length; j < length; j++, i++) {
    cc[i] = c[j];
    }
    */
    for(int j = c.length -length, i = 0 ; j < c.length ; j++, i++ ) {
    cc[i] = c[c.length - length + i];
    }
    for(int j = 0, i = length; i < c.length; j++,i++) {
    cc[i] = c[j];
    }
    //test
    /*
    for(int i = 0; i < cc.length; i++) {
    System.out.print(cc[i] +" ");
    }
    System.out.println();
    */
    return cc;
    }
    }
    a,b,c,d,e
    a,b,c,d,$
    $,b,c,d,e
    a,$,c,d,e
    a,b,$,d,e
    a,b,c,$,e
    a,b,c,$,$
    $,b,c,d,$
    $,$,c,d,e
    a,$,$,d,e
    a,b,$,$,e
    a,b,$,$,$
    $,b,c,$,$
    $,$,c,d,$
    $,$,$,d,e
    a,$,$,$,e
    a,$,$,$,$
    $,b,$,$,$
    $,$,c,$,$
    $,$,$,d,$
    $,$,$,$,e
    $,$,$,$,$
      

  5.   

    - - 原来还要加几个逗号啊
    public static void main(String[] args) {
    String strs = "a,b,c,d";
    Set<String> sets = new HashSet<String>();
    for(long i =0;i<=(1l<<strs.length())-1;i++){
    String stemp = "";
    //将二进制数全部转成000,101,011这种固定长度字符串
    String s = String.format("%"+strs.length()+"s", Long.toBinaryString(i)).replaceAll(" ", "0");
    for(int j = 0;j<s.length();j++){
    if(strs.toCharArray()[j]==','){
    stemp+=strs.toCharArray()[j];
    continue;
    }
    if(s.toCharArray()[j]=='0'){
    stemp+="$";
    }else{
    stemp+=strs.toCharArray()[j];
    }
    }
    sets.add(stemp);
    }
    System.out.println(Arrays.toString(sets.toArray()));
    }
    借助下set这个工具类,虽然不经济,效率也不高,不过在这还算实用
    小倩倩快到碗里来打印结果
    [a,b,$,d, a,b,$,$, $,b,$,$, a,b,c,d, a,b,c,$, a,$,c,$, $,$,$,$, $,b,$,d, a,$,c,d, $,$,$,d, $,b,c,$, a,$,$,d, $,$,c,$, $,b,c,d, a,$,$,$, $,$,c,d]