急,字符串替换code 是啥意思,比如字符串"a,b,$,$,$",就要得到“a,b,$”,“$,$,$”两个组合吗? 遍历字符串碰到a或者$时, 去判断它下一个是否是b或者$并且再下一个是c或者$. 都符合就扔到list, 继续下一循环;否者继续遍历下一个字符。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是,是输入a,b,c;然后要求用$和他们的组合。 //水平有限只能写成这样了....二进制没学好....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); } } 循环,4个取3个.组成一个String 存在Set 容器. 比较笨,供楼主参考: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,ea,b,c,d,$$,b,c,d,ea,$,c,d,ea,b,$,d,ea,b,c,$,ea,b,c,$,$$,b,c,d,$$,$,c,d,ea,$,$,d,ea,b,$,$,ea,b,$,$,$$,b,c,$,$$,$,c,d,$$,$,$,d,ea,$,$,$,ea,$,$,$,$$,b,$,$,$$,$,c,$,$$,$,$,d,$$,$,$,$,e$,$,$,$,$ - - 原来还要加几个逗号啊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] 使用文件通道访问网络数据 java 正则表达式 如何设置远程访问本地机器的共享目录的用户名和密码 一道笔试题 JAVA计算器修改(修改成小程序) struts如何隐藏表单内容? 我是一个初学者,这学期学JSP的,不过看书,有点抽象,又没有实例,大家能不能进来帮帮忙啊? 各位高手,给点建议,谢谢! 苦恼!大家解救我! !!!java 中如何执行FTP命令?请高手指教。100分相赠 大神帮忙看下,为什么会报错。 初学java Heloworld总是出问题,好头疼,求大神
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);
}
}
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
$,$,$,$,$
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]