内容带分隔符的字符串分隔处理

我希望使用“;”字符分隔一个字符串的不同部分,如果字符串中包含;,使用\;进行转义,如: 

引用

“aaa;” “b;b” “ccc”


这两个字符串连接起来即为: 

引用

aaa\;;b\;b;ccc



StringSpliter指定分隔符和转义符,可将这样的字符串分隔出来: 

Java代码  收藏代码

  1. public class StringSpliter {  

  2.   

  3.     public static List<String> spliter(String content, char spliter, char escape) {  

  4.         if (!StringUtils.hasText(content)) {  

  5.             return Collections.EMPTY_LIST;  

  6.         } else {  

  7.             boolean hasPerEscape = false;  

  8.   

  9.             List<String> items = Lists.newArrayList();  

  10.             StringBuilder sb = new StringBuilder();  

  11.             for (int i = 0; i < content.length(); i++) {  

  12.                 char c = content.charAt(i);  

  13.                 if (c == ' ' || c == '\t' || c == '\r' || c == '\n') {  

  14.                     if (hasPerEscape) {  

  15.                         sb.append(escape);  

  16.                         hasPerEscape = false;  

  17.                     }  

  18.                     continue;  

  19.                 }  

  20.   

  21.                 if (c == escape) {  

  22.                     if (hasPerEscape) {  

  23.                         hasPerEscape = false;  

  24.                         sb.append(c);  

  25.                     } else {  

  26.                         hasPerEscape = true;  

  27.                     }  

  28.                 } else if (c == spliter) {  

  29.                     if (hasPerEscape) {  

  30.                         sb.append(c);  

  31.                         hasPerEscape = false;  

  32.                     } else {  

  33.                         if (sb.length() > 0) {  

  34.                             items.add(sb.toString());  

  35.                             sb.delete(0, sb.length());  

  36.                         }  

  37.                     }  

  38.                 } else {  

  39.                     sb.append(c);  

  40.                 }  

  41.             }  

  42.             if (sb.length() > 0) {  

  43.                 items.add(sb.toString());  

  44.             }  

  45.             return items;  

  46.         }  

  47.     }  

  48. }  



单元测试: 

Java代码  收藏代码

  1. public class StringSpliterTest {  

  2.   

  3.     @Test   

  4.     public void testSplit(){  

  5.         String str1 = "aa;bb;cc";  

  6.   

  7.         List<String> items = StringSpliter.spliter(str1, ';''\\');  

  8.         assertNotNull(items);  

  9.         assertEquals(items.size(), 3);  

  10.         assertEquals(items.get(0), "aa");  

  11.         assertEquals(items.get(1),"bb");  

  12.         assertEquals(items.get(2),"cc");  

  13.   

  14.         str1 = ";aa;bb;;;cc;";  

  15.         items = StringSpliter.spliter(str1, ';''\\');  

  16.         assertNotNull(items);  

  17.         assertEquals(items.size(), 3);  

  18.         assertEquals(items.get(0), "aa");  

  19.         assertEquals(items.get(1),"bb");  

  20.         assertEquals(items.get(2),"cc");  

  21.   

  22.         str1 = "a\\;a;bb\\;;\\;cc";  

  23.         items = StringSpliter.spliter(str1, ';''\\');  

  24.         assertNotNull(items);  

  25.         assertEquals(items.size(), 3);  

  26.         assertEquals(items.get(0), "a;a");  

  27.         assertEquals(items.get(1),"bb;");  

  28.         assertEquals(items.get(2),";cc");  

  29.   

  30.         str1 = "\\;;\\;";  

  31.         items = StringSpliter.spliter(str1, ';''\\');  

  32.         assertNotNull(items);  

  33.         assertEquals(items.size(), 2);  

  34.         assertEquals(items.get(0), ";");  

  35.         assertEquals(items.get(1),";");  

  36.   

  37.         str1 = ";;;;;";  

  38.         items = StringSpliter.spliter(str1, ';''\\');  

  39.         assertNotNull(items);  

  40.         assertEquals(items.size(), 0);  

  41.   

  42.         str1 = "\\ ; \\ ;";  

  43.         items = StringSpliter.spliter(str1, ';''\\');  

  44.         assertNotNull(items);  

  45.         assertEquals(items.size(), 2);  

  46.         assertEquals(items.get(0), "\\");  

  47.         assertEquals(items.get(1),"\\");  

  48.   

  49.         str1 = "aaa";  

  50.         items = StringSpliter.spliter(str1, ';''\\');  

  51.         assertNotNull(items);  

  52.         assertEquals(items.size(), 1);  

  53.         assertEquals(items.get(0), "aaa");  

  54.     }  

  55. }  


转载于:https://my.oschina.net/stamen/blog/494432

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值