我希望使用“;”字符分隔一个字符串的不同部分,如果字符串中包含;,使用\;进行转义,如:
引用
“aaa;” “b;b” “ccc”
这两个字符串连接起来即为:
引用
aaa\;;b\;b;ccc
StringSpliter指定分隔符和转义符,可将这样的字符串分隔出来:
public class StringSpliter {
public static List<String> spliter(String content, char spliter, char escape) {
if (!StringUtils.hasText(content)) {
return Collections.EMPTY_LIST;
} else {
boolean hasPerEscape = false;
List<String> items = Lists.newArrayList();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < content.length(); i++) {
char c = content.charAt(i);
if (c == ' ' || c == '\t' || c == '\r' || c == '\n') {
if (hasPerEscape) {
sb.append(escape);
hasPerEscape = false;
}
continue;
}
if (c == escape) {
if (hasPerEscape) {
hasPerEscape = false;
sb.append(c);
} else {
hasPerEscape = true;
}
} else if (c == spliter) {
if (hasPerEscape) {
sb.append(c);
hasPerEscape = false;
} else {
if (sb.length() > 0) {
items.add(sb.toString());
sb.delete(0, sb.length());
}
}
} else {
sb.append(c);
}
}
if (sb.length() > 0) {
items.add(sb.toString());
}
return items;
}
}
}
单元测试:
public class StringSpliterTest {
@Test
public void testSplit(){
String str1 = "aa;bb;cc";
List<String> items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 3);
assertEquals(items.get(0), "aa");
assertEquals(items.get(1),"bb");
assertEquals(items.get(2),"cc");
str1 = ";aa;bb;;;cc;";
items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 3);
assertEquals(items.get(0), "aa");
assertEquals(items.get(1),"bb");
assertEquals(items.get(2),"cc");
str1 = "a\\;a;bb\\;;\\;cc";
items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 3);
assertEquals(items.get(0), "a;a");
assertEquals(items.get(1),"bb;");
assertEquals(items.get(2),";cc");
str1 = "\\;;\\;";
items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 2);
assertEquals(items.get(0), ";");
assertEquals(items.get(1),";");
str1 = ";;;;;";
items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 0);
str1 = "\\ ; \\ ;";
items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 2);
assertEquals(items.get(0), "\\");
assertEquals(items.get(1),"\\");
str1 = "aaa";
items = StringSpliter.spliter(str1, ';', '\\');
assertNotNull(items);
assertEquals(items.size(), 1);
assertEquals(items.get(0), "aaa");
}
}
分享到:
相关推荐
matlab开发-拆分分隔符分隔字符串到矩阵。函数将分隔符分隔的字符串拆分为双精度矩阵。
按分隔符提取字符串组 按分隔符提取字符串组 按分隔符提取字符串组
用于字符处理的小工具,可以添加分隔符,删除分隔符,自定义分隔符符号,计算字符串长度
POWERBLUIDE11 将带有分隔符的字符串,转为SQL IN语句中需要的格式字符串;如:ABCD1234,ABCD5678 转换为 'ABCD1234','ABCD5678'然后可放直接放入IN语句中。
按分隔符拆分字符串 分隔符 拆分 字符串
1)利用SUBSTITUTE将分隔符替换成空字符 2)利用LEN - LEN(SUBSTITUTE) 即可获取里面被替换掉了多少个分隔符 3)使用SUBSTITUTE将最后一个分隔...5)利用RIGHT或LEFT函数即可截取最后一个分隔符右边或左边的字符串内容
将带分隔符的字符串 例如 '1,2,3,4,5,6,7,8,9,10' 转换成table 的列的函数
POWERBLUIDE12.5 将带有分隔符的字符串,转为SQL IN语句中需要的格式字符串;如:ABCD1234,ABCD5678 转换为 'ABCD1234','ABCD5678'然后可放直接放入IN语句中。
matlab开发-分析字符串使用分隔符。这两个函数基于一个或多个分隔符解析字符串或字符串单元格数组。
以下测试用于去除任何字符串中连线的分隔符 代码如下: –去除字符串中连续的分隔符 declare @str nvarchar(200) declare @split nvarchar(200),@times int set @str=’中 国1 2 34 55 5 6 7 7′;–字符 set @split=...
对字符串按指定的字符串进行分隔,一段代码为知道分隔符数量的,一段代码为分隔符数量不知道。 对学习指针及字符串都有一定的帮助作用。
用c语言写的按照指定分隔符进行字符串分割的函数。针对char*可以获得完美的结果。使用方便。
matlab开发-拆分分隔符分隔字符串到矩阵.zip.zip
c语言实现字符串分割split(), 实现C语言实现按分隔符来截取字符串
JS字符串添加删除操作,以逗号分隔.可自定义分隔符,但不支持正则特殊字符。
用 逗号等分隔符 分开的字符串数量 比如 aaa,bbb,ccc 输出3
分割0x02 注释格0x03 标识符标识符来对变量,类型等程序实体命名第个字不能是数字,并且标识符不能是数字或者Go语关键词正确的标识符:错误的0x04 字符串
自定义聚集函数拼接字符串,根据网上常见的例子加以改进,可以自定义分隔符(利用的自定义type)。
参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。 其它:strtok函数线程不安全,可以使用strtok_r替代。 示例: //借助strtok实现...
string :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大...