递归剔除字符创中的逗号 上次去科大国创面试,第一道算法题就是递归算法,可怜知识贫瘠,没搞定。String str = "e,g,h,j,k,k,j,h,";递归剔除字符串中的逗号; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /** * 删除一个字符串中的逗号 * * @param data * 源字符串 * @return 被删除逗号的字符串 */ public static String deleteComma(String data) { for (int i = 0; i < data.length(); i++) { if (data.substring(i, i+1).equals(",")) { //找到第一个逗号,该豆号之前的东西肯定没有逗号,之后的字符串执行删除方法,再连接起来返回 return data.substring(0, i) + deleteComma(data.substring(i + 1)); } } return data; }刚刚写的主方法是这样的 public static void main(String[] args) { String str = "a,b,ccc,e33,3"; System.out.println(deleteComma(str)); } 写一个方法,返回字符串:public static String rmvStr(String str){ if(str.length()==1) return ",".equals(str)?"":str; String first = str.substring(0, 1); first = ",".equals(first)?"":first; return first+rmvStr(str.substring(1)); } static String removeComma(String s){ if(s.indexOf(",") == -1) return s; return removeComma(s.replaceFirst(",",""));} 干嘛非得用剃归 用split substring不好么? 反正个人很烦那个递归 兄弟你的方法 不健全吧 public String Delete(String str){ for (int i = 0; i < str.length(); i++) { if(str.substring(i, i+1).equals(",")){ str=str.substring(0, i)+str.substring(i+1); i--;//这里为什么i--想想? } } return str; } public static void main(String[] args) { Aaa a=new Aaa(); System.out.println(a.Delete(",,a,,fg,hg,b,c,,,d,,,,,")); }输出:afghgbcd 3楼不比2楼好吧,逐个字符串递归,那得多递归不少次,效率就下来了。看来我还是来晚了,我支持2楼,来个char[]版的: public static char[] replaceComma(char[] oldCs) { for (int i = 0; i < oldCs.length; i++) { if (oldCs[i] == ',') { char[] newCs = new char[oldCs.length - 1]; System.arraycopy(oldCs, 0, newCs, 0, i); System.arraycopy(oldCs, i + 1, newCs, i, oldCs.length - i - 1); return replaceComma(newCs); } } return oldCs; } public static void main(String[] args) { String str = "a,b,ccc,e33,3,"; System.out.println(replaceComma(str.toCharArray())); 解析excel问题 关于一道ACM题,总是超时,请帮帮忙!! 有没有进行算术运算的API啊,进行积分或者LOG运算 在文件中查找字符串 初学者问一个问题,谢谢 使用过JTable的高手请帮忙,给高分! java的编译问题 请问,pb组件是否能够发布到jboss吗? 急:谁知道关于jTable单元格设置数据类型和显示格式? [编译问题]JAVA入门:帮忙看下小弟的问题 在线等,myeclipse出错,这次真的不懂,唉,求教,谢谢! java新手使用for循环完成数组元素的插入
/**
* 删除一个字符串中的逗号
*
* @param data
* 源字符串
* @return 被删除逗号的字符串
*/
public static String deleteComma(String data) {
for (int i = 0; i < data.length(); i++) {
if (data.substring(i, i+1).equals(",")) {
//找到第一个逗号,该豆号之前的东西肯定没有逗号,之后的字符串执行删除方法,再连接起来返回
return data.substring(0, i) + deleteComma(data.substring(i + 1));
}
}
return data;
}
刚刚写的主方法是这样的
public static void main(String[] args) {
String str = "a,b,ccc,e33,3";
System.out.println(deleteComma(str));
}
if(str.length()==1) return ",".equals(str)?"":str;
String first = str.substring(0, 1);
first = ",".equals(first)?"":first;
return first+rmvStr(str.substring(1));
}
if(s.indexOf(",") == -1) return s;
return removeComma(s.replaceFirst(",",""));
}
public String Delete(String str){
for (int i = 0; i < str.length(); i++) {
if(str.substring(i, i+1).equals(",")){
str=str.substring(0, i)+str.substring(i+1);
i--;//这里为什么i--想想?
}
}
return str;
}
public static void main(String[] args) {
Aaa a=new Aaa();
System.out.println(a.Delete(",,a,,fg,hg,b,c,,,d,,,,,"));
}输出:afghgbcd
3楼不比2楼好吧,逐个字符串递归,那得多递归不少次,效率就下来了。
看来我还是来晚了,我支持2楼,来个char[]版的:
public static char[] replaceComma(char[] oldCs) {
for (int i = 0; i < oldCs.length; i++) {
if (oldCs[i] == ',') {
char[] newCs = new char[oldCs.length - 1];
System.arraycopy(oldCs, 0, newCs, 0, i);
System.arraycopy(oldCs, i + 1, newCs, i, oldCs.length - i - 1);
return replaceComma(newCs);
}
}
return oldCs;
}
public static void main(String[] args) {
String str = "a,b,ccc,e33,3,";
System.out.println(replaceComma(str.toCharArray()));