今天面试了一道题 请教! 题好像是这样的:有这样一串字符串“abbcdef33”,截取掉“abb33”,还不能用substring等方法,问怎么做最快? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 abbabbcdef33 这个结果应该是啥? 不准用substring?那就用正则了/^[cdef]$/不知道对否? 题目意思是针对abbcdef33这个特定串,还是我可以任意给个串要你去掉? 如果仅是针对这个特定字符串,扫描一遍就行,但如果是给个任意串,如abbabbcdef33 这种,处理起来应该比较麻烦。#include "iostream"using namespace std;int main(){ char str1[10] = "abbcdef33"; char str2[6] = "abb33"; char str3[10]= ""; int i, j, k; i = j = k =0; while(str1[i] && str2[j]) { if(str1[i] == str2[j]) j++; else str3[k++] = str1[i]; i++; } while(str1[i]) str3[k] = '\0'; puts(str3); return 0;} 不好意思,忘说了。能不能写个java类啊! 改了下,不知道行不行。import java.util.*;import java.lang.*;public class Main { public static void main(String[] args) { String str1 = "abbcdef33"; String str2 = "abb33"; String str3= ""; int i, j, k, len1 = str1.length(), len2 = str2.length(); i = j = k =0; while(i < len1 && j < len2) { if(str1.charAt(i) == str2.charAt(j)) j++; else str3 += str1.charAt(i); i++; } while(i < len1 ) { str3 += str1.charAt(i); i++; } System.out.println(str3); }} 使用正则表达式 替换了字符串中所有的a,b或数字String regex = "[ab]|\\d";String target = "abbcdef33";String s = target.replaceAll(regex, "");System.out.println(s); package c;public class Test2 { public static void main(String[] args) { String str1 = "abbcdef33"; String rex = "abb(\\w+)33"; System.out.println("print --> " + str1.replaceAll(rex, "$1")); // print --> cdef }} String s = "abbcdef33";System.out.println(s.replace("abb","").replace("33",""));//先去掉abb再去掉33 应该靠的是算法而且是字匹配算法 字符串的匹配kunth—morris—pratt algorithm package cn.jinyang;public class Test { public static void main(String[] args) { String str = "abbcdef33"; System.out.println(subStr(str, 3,4)); } /** * * @param sou * @param f 开始位置 * @param l 截取长度 * @return */ static String subStr(String sou, int f, int l){ String s = ""; int len = sou.length(); if(f > len){ return sou; } l = (len - f < l) ? (len-f) : l; for (int i = f; i < l+f; i++) { s += sou.charAt(i); } return s; }} var r='abbcdef33';var len=r.length;for(var i=0;i<len;i++){ if(r[i]=='a'||r[i]=='b'||r[i]=='3'){ r=r.replace(r[i],'');}} 我咋觉得这问题绕来绕去,那人就想问你substr的实现方法呢 个人认为人家题目的意思是去掉有重复的字符.如果是针对“abbcdef33”和"abb33", 我还不如直接return "cdef"呢. System.out.println("abbabbcdef33 ".replaceAll("a", "").replaceAll("b", "").replaceAll("3", ""));既然只针对这个字符串。 思维很严谨的程序开发人员,import java.lang.*; 学习这种思维方式 RT:有这样一串字符串“abbcdef33”,截取掉“abb33”,还不能用substring等方法,问怎么做最快?如果只是针对这个字符串的话,直接用replaceAll就OK了,需要那么麻烦吗。String str1 = "abbcdef33";String str3 = str1.replaceAll("abb", "").replaceAll("33", "");System.out.println(str3); --嘻嘻,在54楼的基础上改下,给分吧~String str1 = "abbcdef33";String str3 = str1.replaceAll("^abb|33$", "");System.out.println(str3); 其实java的replaceAll也是用正则表达式实现的,不过用起来简单,而且容易理解 关于webservice的问题 求java网站url重写(实现伪静态) 帮忙分析hibernate配置 理论上有问题吗? 【求救】初学者的AXIS2+TOMCAT5.5问题 大家帮我看看啊~~ 邮箱的问题 JDBC连接数据库时,报这样的错误:ORA-00600: internal error code, Context中的reloadable设置成true后对session是否回清空. web services菜鸟的web services开发问题。 书《J2EE 核心模式》第二版 的技术是不是很旧了? 高手帮帮忙,关于hibernate3.0的映射配置问题 struts2
/^[cdef]$/
不知道对否?
题目意思是针对abbcdef33这个特定串,还是我可以任意给个串要你去掉?
abbabbcdef33 这种,处理起来应该比较麻烦。#include "iostream"
using namespace std;
int main()
{
char str1[10] = "abbcdef33";
char str2[6] = "abb33";
char str3[10]= "";
int i, j, k;
i = j = k =0;
while(str1[i] && str2[j])
{
if(str1[i] == str2[j])
j++;
else
str3[k++] = str1[i];
i++;
}
while(str1[i])
str3[k] = '\0';
puts(str3);
return 0;
}
能不能写个java类啊!
import java.lang.*;
public class Main {
public static void main(String[] args) {
String str1 = "abbcdef33";
String str2 = "abb33";
String str3= "";
int i, j, k, len1 = str1.length(), len2 = str2.length();
i = j = k =0;
while(i < len1 && j < len2)
{
if(str1.charAt(i) == str2.charAt(j))
j++;
else str3 += str1.charAt(i);
i++;
}
while(i < len1 )
{
str3 += str1.charAt(i);
i++;
}
System.out.println(str3);
}
}
String regex = "[ab]|\\d";
String target = "abbcdef33";
String s = target.replaceAll(regex, "");
System.out.println(s);
package c;public class Test2 {
public static void main(String[] args) {
String str1 = "abbcdef33";
String rex = "abb(\\w+)33";
System.out.println("print --> " + str1.replaceAll(rex, "$1")); // print --> cdef
}
}
String s = "abbcdef33";
System.out.println(s.replace("abb","").replace("33",""));
//先去掉abb再去掉33
kunth—morris—pratt algorithm
package cn.jinyang;public class Test {
public static void main(String[] args) {
String str = "abbcdef33";
System.out.println(subStr(str, 3,4));
}
/**
*
* @param sou
* @param f 开始位置
* @param l 截取长度
* @return
*/
static String subStr(String sou, int f, int l){
String s = "";
int len = sou.length();
if(f > len){
return sou;
}
l = (len - f < l) ? (len-f) : l;
for (int i = f; i < l+f; i++) {
s += sou.charAt(i);
}
return s;
}
}
var len=r.length;
for(var i=0;i<len;i++)
{
if(r[i]=='a'||r[i]=='b'||r[i]=='3')
{
r=r.replace(r[i],'');
}
}
如果是针对“abbcdef33”和"abb33", 我还不如直接return "cdef"呢.
思维很严谨的程序开发人员,import java.lang.*; 学习这种思维方式
String str3 = str1.replaceAll("abb", "").replaceAll("33", "");
System.out.println(str3);
String str1 = "abbcdef33";
String str3 = str1.replaceAll("^abb|33$", "");
System.out.println(str3);