拆分整数值但不是浮点值

时间:2016-03-31 22:05:31

标签: java string split iterator

我有一个java程序,我需要拆分整数值而不是浮点值

即。 "1/\\2"应生成:[1,/\\,2] 但是"1.0/\\2.0"应该产生:[1.0,/\\,2.0]

有人有任何想法吗?

或者有人可以指出我如何分割特定字符串"\\/""/\\"吗?

更新:对不起!还有一个案子!对于字符串“100 / \ 3.4e + 45”我需要将其拆分为:  [100,/ \,3.4,e,+,45]

我当前的正则表达式(真的很难看):

line.split("\\s+|(?<=[-+])|(?=[-+])|(?:(?<=[0-9])(?![0-9.]|$))|(?:(?<![0-9.]|^)(?=[0-9]))|(?<=[-+()])|(?=[-+()])|(?<=e)|(?=e)");

并为字符串:“100 / \ 3.4e + 45”给我:  [100,/ \,3.4,+,45]

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

    String regex = "\\d+(.\\d+)?", str = "1//2";
    Matcher m = Pattern.compile(regex).matcher(str);
    ArrayList<String> list = new ArrayList<String>();

    int index = 0;
    for(index = 0 ; m.find() ; index = m.end()) {
        if(index != m.start()) list.add(str.substring(index, m.start()));
        list.add(str.substring(m.start(), m.end()));
    }

    list.add(str.substring(index));

我们的想法是使用regexMatcher查找号码,并在两者之间添加字符串。

答案 1 :(得分:0)

这个正则表达式应该这样做:

(?:(?<=[0-9])(?![0-9.]|$))|(?:(?<![0-9.]|^)(?=[0-9]))

这是两张基本匹配的支票:

  1. 数字后面没有数字,小数点或文本结尾。
  2. 数字前面没有数字,小数点或文本开头。
  3. 它将匹配数字后面/前面的空格,因此您可以在split()中使用此正则表达式。

    请参阅regex101了解演示。

    <强>后续

      

    任何人都可以指出我如何分割特定的字符串&#34; \ /&#34;和&#34; / \&#34;&#34;

    如果要在特定模式之前拆分,请使用正向前瞻(?=xxx)。如果要在特定模式之后进行拆分,请使用正向后视(?<=xxx)。要么做,请按|分隔:

    (?<=xxx)|(?=xxx)
    

    其中xxx文本 \//\,即正则表达式\\/|/\\,并且是Java字符串文字的两倍:

    "(?<=\\\\/|/\\\\)|(?=\\\\/|/\\\\)"
    

    请参阅regex101了解演示。