【问题标题】:string split in java is not working as expected giving wrong resultjava中的字符串拆分没有按预期工作,给出错误的结果
【发布时间】:2013-08-16 13:33:07
【问题描述】:
String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04|2013-08-08 12:58:08|ANSWER";

我想使用|分割字符串。我在java中有上面的字符串。当我使用时

System.out.println(text.split("|").length);

我得到的结果是 82。这里可能出了什么问题。

【问题讨论】:

  • 你期待什么结果?

标签: java string split


【解决方案1】:

String#split 使用正则表达式作为参数。管道字符| 具有特殊含义(意思是或)防止字符串在每个文字| 内部被拆分。

应该转义

text.split("\\|").length

否则在确定长度时将使用完整的String

【讨论】:

  • +1 这是一个非常有趣的解决方法。直到我读了这篇文章,我才知道这一点。干得好。
  • 确实有很大帮助。一直在挠我的头。
【解决方案2】:

String.split(String) 使用正则表达式,| 在正则表达式中具有特殊含义。

选项:

  • 手动转义|text.split("\\|")
  • 以编程方式转义|text.split(Pattern.quote("|"))
  • 改用GuavaSplitter类,完全避免使用正则表达式

我个人会选择后一种方法-我认为String.split使用正则表达式实际上是一个设计缺陷,并且在调用代码时不清楚。

如果你真的想使用String.split,我肯定会使用Pattern.quote 让任何阅读代码的人都清楚为什么你要逃避它- 仅使用 "\\|" 不是很自我记录,IMO。

【讨论】:

  • 我希望看到添加 String.split(char 分隔符) 方法来满足这种相当常见的场景。天知道实现会很简单。我记得在一行非常长、非常丑陋的 ANSI-C 代码中看到了这一点。男人和虫子要额外花钱的好日子。
【解决方案3】:

你忘记了转义字符,

text.split("\\\|");

【讨论】:

    【解决方案4】:
    public class Sstring {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04 |2013-08-08 12:58:08|ANSWER";
            System.out.println(text.split("\\|").length);
            String str[] = text.split("\\|");
    
            for(String i:str){
                System.out.println(i);
            }
        }
    
    }
    

    【讨论】:

      【解决方案5】:

      你应该输入\\你忘了这个。

      text.split("\\|")
      

      【讨论】:

        【解决方案6】:

        番石榴,像往常一样!

        Splitter.on("|").split("your_text")
        

        这会返回一个 Iterable。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多