笔试题目, 大家做做 有两个String s1;String s2;从s1中查找出s2,并删除。返回删除后的s1;写一个delString(String s1,String s2)方法, 不能用API 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不论什么语言,API是库函数, #INCLUDE IMPORT 这些 不过我知道C语言容易写一些吧 我也想知道怎么做!~不会写代码!~s2是s1的子字符串,s2在s1中不断地匹配,向前自增1if (找到)执行delete(s2) 不用API?String 不是API吗? 不能用api,我想指的就是不能用 比如java里面的 indexOf,charAt 之类的东东吧。 /** * @author mengfanpp * */public class StringDemo1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "I am a student !"; String s2 = "student"; System.out.println(delString(s1, s2)); } private static String delString(String s1, String s2) { String tmp = ""; for (int i = 0, len1 = s1.length(); i < len1; i++) { for (int m = 0, len2 = s2.length(); m < len2; m++, i++) { //System.out.println("比较:"+s2.charAt(m)+":"+ s1.charAt(i)); if (s2.charAt(m) != s1.charAt(i)) { tmp += s1.charAt(i); //System.out.println(tmp); break; } } } return tmp; }} public static void main(String[] args) { String s1="abcdefg"; String s2="bc"; String s3=s1.replaceAll(s2,""); System.out.println(s3);}输出:adefg 虽然有人给出答案了,不过楼主要的可能是mengfanpp(梦凡) 写的,很原始的,呵呵 /** * @author mengfanpp * */public class StringDemo1 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString s1 = "I am a student !";String s2 = "student";System.out.println(delString(s1, s2));}private static String delString(String s1, String s2) {String tmp = "";for (int i = 0, len1 = s1.length(); i < len1; i++) {for (int m = 0, len2 = s2.length(); m < len2; m++, i++) {//System.out.println("比较:"+s2.charAt(m)+":"+ s1.charAt(i));if (s2.charAt(m) != s1.charAt(i)) {tmp += s1.charAt(i);//System.out.println(tmp);break;}}}return tmp;}}这个明显有BUG大家用这个试试就知了"abcdefgb","bc" private static String getDelString(String str1, String str2) { int strlen1 = str1.length(); int strlen2 = str2.length(); String str; for(int i=0; i<strlen1-strlen2; i++) { str = str1.substring(i,i+strlen2); if(str.equals(str2)) { str = str1.substring(0,i)+str1.substring (i+strlen2,strlen1); return str; } } return str1; }用到了String 类中的方法,大家看看算不算用到API? 写了个函数,可以很好的做到你要的要求,甚至还如果S1中有N多个S2也能去掉,写的半小时,所以算法比较烂,我JAVA比较菜。QQ:124798013 //使用方法 System.out.println("cjc:"+delString("123aa123a123z123z123z123cc123c123","123")); //输出结果 aaazzzccc //封的那个函数,算法挺烂的 public String delString(String s1,String s2) { String cjc=""; boolean isSame=true; //creat map int bad[]=new int[s1.length()]; for(int i=0;i<bad.length;i++) { bad[i]=0; } //text for(int i=0;i<(s1.length()-s2.length())+1;i++) { System.out.println("i:"+i); isSame=true; for(int j=0;j<s2.length();j++) { System.out.println("j:"+j); if(s1.charAt(i+j)!=s2.charAt(j)) { isSame=false; break; } } if(isSame) { bad[i]=1; } } //生成 for(int i=0;i<bad.length;i++) { System.out.println("aa---i:"+i); if(bad[i]==0) { cjc+=s1.charAt(i); } else { i+=s2.length()-1; System.out.println("++i:"+i); } } return cjc; } muziyi0208() 写的有点问题啊 如果有多个匹配就不行了 我改了下:class Test { public static void main(String[] args) { String s1 = "中国人国家人中国人民族国"; String s2 = "国人"; System.out.println(deleteString(s1,s2)); } public static String deleteString(String s1, String s2) { String str = s1; int strlen2 = s2.length(); int count = 0; for(int i = 0; i < str.length() - strlen2; i++) { String substring = str.substring(i, i + strlen2); if(substring.equals(s2)) { count++; str = str.substring(0, i) + str.substring(i+strlen2,str.length()); i = i + strlen2; continue; } } System.out.println("匹配了" + count + "次!"); return str; }}结果:匹配了2次!中国家人中民族国 public class StringDemo { public static void main(String[] args) { String s1 = "我叫赵长云,不叫赵子龙"; String s2 = "赵"; System.out.println(delString(s1, s2)); } private static String delString(String s1, String s2) { String s=""; for(int i=0;i<s1.length();i++){ int a=i; for(int t=0;t<s2.length();t++){ if(s1.charAt(a)==s2.charAt(t)){ if(t==(s2.length()-1)) i+=s2.length()-1;//比较结束,i向后跳s2.length()-1位继续比较 a++; }else{ s=s+s1.charAt(i);//记录不符合条件的 break;// } } } return s; } } 用了charAt方法算不算用了API啊... 没有服务器如何实现更新提醒? 推荐一个 j2se 使用的混淆器 JComboBox如何才能实现在下拉菜单中进行图片选择?? c+=26 与c=c+26有时候为什么不同???? 140分求字符串转换成double完美方法 snmp4j关于cpu使用情况的OID问题 请各位大虾看个程序. 求助,关于JTree 分享一java做的代码统计工具 中文变量的问题! 怎么csdn上电子图书里的doc版<精通Struts技术>只有两章啊 字符串怎样进行数学运算??
不过我知道C语言容易写一些吧
if (找到)执行delete(s2)
String 不是API吗?
* @author mengfanpp
*
*/
public class StringDemo1 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "I am a student !"; String s2 = "student"; System.out.println(delString(s1, s2)); } private static String delString(String s1, String s2) { String tmp = "";
for (int i = 0, len1 = s1.length(); i < len1; i++) {
for (int m = 0, len2 = s2.length(); m < len2; m++, i++) {
//System.out.println("比较:"+s2.charAt(m)+":"+ s1.charAt(i));
if (s2.charAt(m) != s1.charAt(i)) {
tmp += s1.charAt(i);
//System.out.println(tmp);
break;
}
}
} return tmp;
}}
String s2="bc";
String s3=s1.replaceAll(s2,"");
System.out.println(s3);
}
输出:adefg
* @author mengfanpp
*
*/
public class StringDemo1 {/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "I am a student !";String s2 = "student";System.out.println(delString(s1, s2));}private static String delString(String s1, String s2) {String tmp = "";for (int i = 0, len1 = s1.length(); i < len1; i++) {
for (int m = 0, len2 = s2.length(); m < len2; m++, i++) {
//System.out.println("比较:"+s2.charAt(m)+":"+ s1.charAt(i));
if (s2.charAt(m) != s1.charAt(i)) {
tmp += s1.charAt(i);
//System.out.println(tmp);
break;
}
}
}return tmp;
}}这个明显有BUG
大家用这个试试就知了
"abcdefgb","bc"
{
int strlen1 = str1.length();
int strlen2 = str2.length();
String str;
for(int i=0; i<strlen1-strlen2; i++)
{
str = str1.substring(i,i+strlen2);
if(str.equals(str2))
{
str = str1.substring(0,i)+str1.substring (i+strlen2,strlen1);
return str;
}
}
return str1;
}
用到了String 类中的方法,大家看看算不算用到API?
所以算法比较烂,我JAVA比较菜。QQ:124798013 //使用方法
System.out.println("cjc:"+delString("123aa123a123z123z123z123cc123c123","123"));
//输出结果
aaazzzccc
//封的那个函数,算法挺烂的
public String delString(String s1,String s2)
{
String cjc="";
boolean isSame=true;
//creat map
int bad[]=new int[s1.length()];
for(int i=0;i<bad.length;i++)
{
bad[i]=0;
}
//text
for(int i=0;i<(s1.length()-s2.length())+1;i++)
{
System.out.println("i:"+i);
isSame=true; for(int j=0;j<s2.length();j++)
{
System.out.println("j:"+j);
if(s1.charAt(i+j)!=s2.charAt(j))
{
isSame=false;
break;
}
} if(isSame)
{
bad[i]=1;
} }
//生成
for(int i=0;i<bad.length;i++)
{
System.out.println("aa---i:"+i);
if(bad[i]==0)
{
cjc+=s1.charAt(i);
}
else
{
i+=s2.length()-1;
System.out.println("++i:"+i);
}
}
return cjc;
}
class Test
{
public static void main(String[] args)
{
String s1 = "中国人国家人中国人民族国";
String s2 = "国人";
System.out.println(deleteString(s1,s2));
} public static String deleteString(String s1, String s2)
{
String str = s1;
int strlen2 = s2.length();
int count = 0;
for(int i = 0; i < str.length() - strlen2; i++)
{
String substring = str.substring(i, i + strlen2);
if(substring.equals(s2))
{
count++;
str = str.substring(0, i) + str.substring(i+strlen2,str.length());
i = i + strlen2;
continue;
}
}
System.out.println("匹配了" + count + "次!");
return str;
}
}结果:
匹配了2次!
中国家人中民族国
public static void main(String[] args) {
String s1 = "我叫赵长云,不叫赵子龙"; String s2 = "赵"; System.out.println(delString(s1, s2)); }
private static String delString(String s1, String s2) {
String s="";
for(int i=0;i<s1.length();i++){
int a=i;
for(int t=0;t<s2.length();t++){
if(s1.charAt(a)==s2.charAt(t)){
if(t==(s2.length()-1))
i+=s2.length()-1;//比较结束,i向后跳s2.length()-1位继续比较
a++;
}else{
s=s+s1.charAt(i);//记录不符合条件的
break;//
}
}
}
return s;
}
}