【问题标题】:split on integer values but not floating point values拆分整数值但不拆分浮点值
【发布时间】:2016-07-20 13:43:55
【问题描述】:

我有一个 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]

【问题讨论】:

  • 如果. 不是当前语言环境的小数分隔符,它应该产生什么?
  • public String[] split(String regex) 这是 split 的签名,您可以通过 "V" 或 "/\" 来拆分值。我仍然不清楚这个问题

标签: java string split iterator


【解决方案1】:

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

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

是两个检查,基本匹配:

  1. 数字后不跟数字、小数点或文本结尾。
  2. 前面没有数字、小数点或文本开头的数字。

它将匹配数字之后/之前的空格,因此您可以在split() 中使用此正则表达式。

请参阅regex101 进行演示。


跟进

谁能告诉我如何拆分特定的字符串“\/”和“/\””

如果您想在特定模式之前进行拆分,请使用正向预测(?=xxx)。如果您想在特定模式之后进行拆分,请使用积极的后视(?&lt;=xxx)。要执行任一操作,请以| 分隔:

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

其中xxx文本 \//\,即正则表达式\\/|/\\,对于Java 字符串文字加倍:

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

请参阅regex101 以获取演示。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

        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 查找数字,并在其间添加字符串。

    【讨论】:

      猜你喜欢
      • 2018-09-02
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多