碰到一个应用场景,有一表单字符串:
String test = "<form><input ...><input ...>...<input ...></form>";
现在需要在最后一个<input ...>字段后再加上一个<input ...>字段,用来实现特定的功能,前提是这个字符串长度是不定长的,<input ...>的个数也是不定的。
当时碰到这个问题直接想到两个方法,indexOf和replace,下面给出我的解决方法。
indexOf:
replace:
两个方法的复杂度基本一样,但我觉得第一种可能更灵活一点,因为如果后面</form>字段也是不定长的话,repalce方法就不能直接这么用了,可能还得和indexOf结合用,更麻烦。
indexOf方法:指定所要查找的内容在字符串中第一次出现的位置,如果未出现则返回-1,区分大小写。lastIndexOf方法基本一样,有以下几种用法:
replace方法:在字符串中对替换相应的字符或字符串,相关方法还有replaceFirst与replaceAll。
replaceFirst:替换在原始字符串中第一次出现的字符或字符串,以后的不管。
replaceAll:与replace相比都是全部替换,不同的是基于规则表达式的替换,对特殊字符的处理有些不同。
String test = "<form><input ...><input ...>...<input ...></form>";
现在需要在最后一个<input ...>字段后再加上一个<input ...>字段,用来实现特定的功能,前提是这个字符串长度是不定长的,<input ...>的个数也是不定的。
当时碰到这个问题直接想到两个方法,indexOf和replace,下面给出我的解决方法。
indexOf:
String test = "<form><input ...><input ...>...<input ...></form>";
String str = "<input last>";
int ch = test.indexOf("</form>");
test = test.substring(0, ch) + str + test.substring(ch, test.length());
/** 结果 */
test = "<form><input ...><input ...>...<input ...><input last></form>"
replace:
String test = "<form><input ...><input ...>...<input ...></form>";
String str = "<input last>" + "</form>";
test = test.replace("</form>", str);
/** 结果 */
test = "<form><input ...><input ...>...<input ...><input last></form>"
两个方法的复杂度基本一样,但我觉得第一种可能更灵活一点,因为如果后面</form>字段也是不定长的话,repalce方法就不能直接这么用了,可能还得和indexOf结合用,更麻烦。
indexOf方法:指定所要查找的内容在字符串中第一次出现的位置,如果未出现则返回-1,区分大小写。lastIndexOf方法基本一样,有以下几种用法:
String str = "hello world";
/** 查找字符0第一次出现的位置索引*/
int a = str.indexOf("o");
/** 查找字符0从索引4开始第一次出现的位置索引*/
int b = str.indexOf("o", 4);
/** 查找字符0最后一次出现的位置索引*/
int c = str.lastIndexOf("o");
/** 查找字符0在索引4内最后一次出现的位置索引*/
int d = str.lastIndexOf("o", 4);
int e = str.lastIndexOf("o", 3)
/** 结果 */
a=4,b=4,c=7,d=4,e=-1
replace方法:在字符串中对替换相应的字符或字符串,相关方法还有replaceFirst与replaceAll。
replaceFirst:替换在原始字符串中第一次出现的字符或字符串,以后的不管。
replaceAll:与replace相比都是全部替换,不同的是基于规则表达式的替换,对特殊字符的处理有些不同。
String test = "a1b2c1d2";
String a = test.replace("1", "3");
String b = test.replaceFirst("1", "3");
String c = test.replaceAll("\\d", "e");
/** 结果 */
a = "a3b2c3d2"
b = "a3b2c1d2"
c = "aebecede"