📝问题描述:
- 截取一个字符串里 以" {{"开始和结束 “}}” 的内容
- 不使用正则表达式实现
❓预期效果
- 传入字符:
{{xx}}_撒打sdsa{}算{x{22}}撒{{我是括号里面的值}xx}打算_{{{33}}
- 预期结果:
xx, 33
- 我传入
字符串是很极端
的情况,因此可以看出可以满足大部分场景
的使用- 直接大家看到输出結果
- 从控制台打印可以看到,跟我预期的结果是一样的
- 上代码
🧠解决方案
1️⃣javascript & vue 实现
/**
* 截取某段字符串
* @param str 需要截取的字符串
* @param start 以某个字符开始 例如 {{
* @param end 以某个字符结束 例如 }}
* @returns {[]} 控制台最终输出 [xx, 33]
*/
function split(str, start, end) {
list = []
var i = 0;
while (true) {
var a = str.indexOf(start, i);
var b = str.indexOf(end, i);
if (a === -1 || b === -1) {
break;
}
if (a > b) {
i = a;
continue;
}
if (a < b) {
a = str.lastIndexOf(start, b);
}
var r = str.substring(a + start.length, b);
list[list.length] = r;
i = b;
}
return list;
}
console.log(split("{{xx}}_撒打sdsa{}算{x{22}}撒{{我是括号里面的值}xx}打算_{{{33}}","{{","}}"))
2️⃣java实现
/**
* 控制台最终输出结果: [xx, 33]
*
*/
public static void main(String[] args) {
String strInfo = "{{xx}}_撒打sdsa{}算{x{22}}撒{{我是括号里面的值}xx}打算_{{{33}}";
List<String> list = get(strInfo, "{{", "}}");
System.out.println(list);
}
/**
* 获取 截取后字符集
* @param str 需要截取的字符串
* @param start 以某个字符开始 例如 {{
* @param end 以某个字符结束 例如 }}
* @return
*/
public static List<String> get(String str, String start, String end) {
List<String> list = new ArrayList<>();
int i = 0;
while (true) {
int a = str.indexOf(start, i);
int b = str.indexOf(end, i);
if (a == -1 || b == -1) {
break;
}
if (a > b) {
i = a;
continue;
}
if (a < b) {
a = str.lastIndexOf(start, b);
}
String r = str.substring(a + start.length(), b);
list.add(r);
i = b;
}
return list;
}