字符串拆分方法没有给出预期的结果[重复]

Posted

技术标签:

【中文标题】字符串拆分方法没有给出预期的结果[重复]【英文标题】:String Split method not Giving desired results [duplicate] 【发布时间】:2016-05-12 14:38:00 【问题描述】:

我正在尝试在java中使用String的Split方法我有这样的例子。

String number  = Math.random() * 100 + "";
System.out.println("Number is : " + number);
String[] seprate = number.split(".");
System.out.println(seprate.length);

它应该给我 2 堆数组我的意思是 2 数组元素,如果值类似于例如67.90512897385857

但它并没有那样赋予价值

String number  = Math.random() * 100 + "";
System.out.println("Number is : " + number);
String[] seprate = number.split(".");
System.out.println(seprate.length);
System.out.println(seprate[1]);

它给出了 arrayindexoutbound 异常。

有人给出想法,为什么它会这样给予?

【问题讨论】:

【参考方案1】:

String#split 方法采用regular expression。

其中的"." 表示任何字符

转义您的 "." 以表示文字点:number.split("\\.")

正如Pieter De Bie 指出的那样,在将文字传递给将被解释为正则表达式的参数时,使用java.util.regex.Pattern 安全地转义您的文字将对您有很大帮助。

在这种情况下,您可以使用:number.split(Pattern.quote("."))

【讨论】:

除了这个答案:我一直使用 string.split(Pattern.quote("possibleRegex")) 来确保我没有拆分正则表达式 @PieterDeBie 好点,将添加到答案中。 不客气,不过我的名字中有一个小错字:p @PieterDeBie 哎呀。现在修复:D【参考方案2】:

您需要转义点。 split 方法采用正则表达式。来自文档:

参数:regex 分隔正则表达式

String[] seprate = number.split("\\.");

【讨论】:

【参考方案3】:

Split 适用于正则表达式,您应该像这样使用

number.split("\\.")

【讨论】:

【参考方案4】:

注意文档

公共字符串[] 拆分(字符串正则表达式)

围绕给定正则表达式的匹配拆分此字符串。

在正则表达式中,.任何 字符(通常除了换行符)。

所以你正在分裂每个角色

如果你只想匹配一个点,"\\." 可以。

【讨论】:

【参考方案5】:
Double f = Math.random() * 100;
        String number  = String.valueOf(f);
        System.out.println("Number is : " + number);
        String[] seprate = number.split("\\.");
        System.out.println(seprate.length);

请使用此链接回答您的问题。

The split() method in Java does not work on a dot (.)

【讨论】:

以上是关于字符串拆分方法没有给出预期的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

拆分字符串的最佳方法是啥? (c++) [重复]

Bigquery SQL 中的拆分函数

为啥单管道字符会混淆java拆分方法? [复制]

当出现任何给定的分隔符时拆分 JavaScript 字符串 [重复]

在c#中拆分逗号分隔多个字符串[重复]

将字符串拆分为字符串数组[重复]