这个问题的重点是从一个字符串中查找另外一个字符串,其实有很多工具包已经做了,例如apache组织(http://jakarta.apache.org)的common lang包的StringUtils类,你可以看一下这个类的源码,我懒得去翻那个源码了,自己先写了一个,你可以比较一下,apache的代码肯定更精简(但不保障不用其他的类库)。
给你一段代码吧,代码比较简单,没有加注释,看看就明白了
package test.others;
public class TestString2 {
public static void main(String args[]) {
TestString2 bean = new TestString2();
String source = "abacdef";
String delimStr = "acd";
String insertStr = "haha";
System.out.println(bean.insert(source, delimStr, insertStr));
}
public String insert(String source, String delimStr, String insertStr) {
if (source == null || source.length() == 0 || delimStr == null
|| delimStr.length() == 0 || insertStr == null
|| insertStr.length() == 0
|| delimStr.length() > source.length()) {
throw new RuntimeException("条件不成立");
} else {
char[] source_char = source.toCharArray();
char[] delim_char = delimStr.toCharArray();
int position = findPosition(source_char, delim_char);
if (position > -1) {
StringBuffer sb = new StringBuffer(source.length()
+ insertStr.length());
sb.append(source.substring(0, position + delimStr.length()))
.append(insertStr).append(source.substring(position+ delimStr.length()));
return sb.toString();
} else {
throw new RuntimeException("没有找到指定字符串");
}
}
}
/**
* @param source
* @param delim
* @return
*/
private int findPosition(char[] source, char[] delim) {
// 前面已经对输入数据进行校验,这里不再做二次校验
int position = -1;
boolean isFound = false;
for (int i = 0; (i < source.length - delim.length && !isFound); i++) {
if (wellMatch(source, delim, i)) {
position = i;
}
}
return position;
}
/**
* @param source
* @param delim
* @param source_start
* @return
*/
private boolean wellMatch(char[] source, char[] delim, int source_start) {
boolean flag = false;
int len = delim.length;
for (int j = 0; j < len; j++) {
if (source[source_start + j] == delim[j]) {
flag = true;
} else {
return false;
}
}
return flag;
}
}
意思就是将两个字符串 拼在一起赋到另一个字符串里!如果符合你的要求我可以写的更详细一点(对参数进行判断然后在进行赋值,现在是有BUG的)!
public class Exercise
{
/**
*param index : 要插入的位置
*param str : 要添加到另一个字符串中的变量
*param str2 : 要将str添加到str2中的变量
*/
public String method(int index,String str,String str2){
String str3="";
for(int i=0;i
for(int j=0;j
}
}
str3+=str2.charAt(i);
}
return str3;
}
public static void main(String []args){
Exercise e=new Exercise();
String str=e.method(1,"abc","abcdefg");
System.out.println(str);
}
}
你可能没有理解出题人的意思!
其实就是叫你实现API的一些功能,但不用它对象的方法,例如点什么。
做定义一个数组,然后移位插入就好了!
甚至可以自己定义一个类,字符当作属性,添加各种Insert方法
主要是思路,得到题想从哪里入手,这个是字符串的定位,无非就是按照一定规则把串切成两个,前边一个加上插入的加上后面的就ok了,很简单
闲着无聊写了个,不知道对不对,还有很多问题没有考虑全。
public class StringTest {
public StringBuffer addStr(String str, String str1, int pos) {
String[] s = new String[100];
String[] temp = new String[100];
int a = str.length();
int b = str1.length();
for (int i = 0; i < a; i++) {
s[i] = str.substring(i, i + 1);
}
for (int i = pos; i < a; i++) {
temp[i - pos] = s[i];
}
for (int i = 0; i < b; i++) {
s[i + pos] = str1.substring(i, i + 1);
}
for (int i = (pos + b); temp[i - pos - b] != null; i++) {
if (temp[i - pos - b] != null)
s[i] = temp[i - pos - b];
else
break;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length() + str1.length(); i++) {
sb.append(s[i]);
}
return sb;
}
public static void main(String[] args) {
StringTest st = new StringTest();
String str = "abcdef";
String str1 = "abc";
StringBuffer sb = st.addStr(str, str1, 3);
System.out.println(sb);
}
}