区块链技术博客
www.b2bchain.cn

Java正则表达式拆分字符串 – java程序员分享

本文介绍了Java正则表达式拆分字符串 – java程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我有点想尝试使用正则表达式来分解具有以下属性的字符串:

  • 用|分隔。 (管道)字符
  • 如果单个值包含管道,请使用(反斜杠)
  • 进行转义

  • 如果单个值以反斜杠结尾,则以反斜杠转义
  • 例如,以下是一些我想分解的字符串:

  • One|Two|Three应该产生:["One", "Two", "Three"]
  • One|Two|Three应该产生:["One|Two|Three"]
  • One\|Two|Three应该产生:["One", "Two|Three"]
  • 现在我如何用一个正则表达式将其拆分?

    更新:正如许多人已经建议的那样,这不是正则表达式的好应用。同样,正则表达式解决方案比仅迭代字符要慢几个数量级。我最终遍历了这些字符:

    public static List<String> splitValues(String val) {     final List<String> list = new ArrayList<String>();     boolean esc = false;     final StringBuilder sb = new StringBuilder(1024);     final CharacterIterator it = new StringCharacterIterator(val);     for(char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {         if(esc) {             sb.append(c);             esc = false;         } else if(c == '\') {             esc = true;         } else if(c == '|') {             list.add(sb.toString());             sb.delete(0, sb.length());         } else {             sb.append(c);         }     }     if(sb.length() > 0) {         list.add(sb.toString());     }     return list; } 

    参考方案

    诀窍是不使用split()方法。这迫使您使用后视来检测转义字符,但是当转义符本身已转义时(如您所知),此操作将失败。您需要改用find()来匹配标记而不是定界符:

    public static List<String> splitIt(String source) {   Pattern p = Pattern.compile("(?:[^|\\]|\\.)+");   Matcher m = p.matcher(source);   List<String> result = new ArrayList<String>();   while (m.find())   {     result.add(m.group().replaceAll("\\(.)", "$1"));   }   return result; }  public static void main(String[] args) throws Exception {   String[] test = { "One|Two|Three",                      "One\|Two\|Three",                      "One\\|Two\|Three",                      "One\\\|Two" };   for (String s :test)   {     System.out.printf("%n%s%n%s%n", s, splitIt(s));   } } 

    输出:

    One|Two|Three [One, Two, Three]  One|Two|Three [One|Two|Three]  One\|Two|Three [One, Two|Three]  One\|Two [One|Two] 

    Java:找到特定字符并获取子字符串 – java

    我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

    Java-搜索字符串数组中的字符串 – java

    在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

    在Java中使用新关键字和直接赋值的字符串 – java

    String s="hi"; String s1=new String("hi"); 从内存角度看,s和s1存储在哪里?无论是在堆内存还是堆栈中。s指向“ hi”,而s1指向hi存在的内存位置?请帮忙? 参考方案 考虑以下 String s = "hi"; String s1 = new Strin…

    Java Regex:将整个单词与单词边界匹配 – java

    我正在尝试使用Java检查字符串是否整体上包含一个单词。以下是一些示例:Text : "A quick brown fox" Words: "qui" – false "quick" – true "quick brown" – true "ox" – fal…

    Java string.hashcode()提供不同的值 – java

    我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

    赞(0) 打赏
    部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Java正则表达式拆分字符串 – java程序员分享
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址

    b2b链

    联系我们联系我们