【问题标题】:Java str.split returning empty elements using RegExJava string.split 使用 RegEx 返回空元素
【发布时间】:2021-12-18 01:28:36
【问题描述】:

我想从字符串中删除不是加号、减号、乘号或除号 (/) 的任何内容。

所以我想我会使用正则表达式和负前瞻。

给定一个 Java 数组:

String[] operandsArray = str.split("(?!\\u002A|\\u002B|\\u002D|\\u002F).")

还有一个55+5的测试字符串,结果数组operandsArray包含:

0:""
1:""
2:"+"

我正在寻找它只包含操作数,所以:

0:"+"

并给出:55+6-6*6/6,将返回:

0:"+"
1:"-"
2:"*"
3:"/"

它也应该匹配重复的,所以给定 5+5+5+5,将返回:

0:"+"
1:"+"
2:"+"

谁能帮忙解决一下,谢谢

【问题讨论】:

  • 看来你只想match and extract[-+/*] 正则表达式。
  • @WiktorStribiżew 嗨,使用[-+/*] 将去除操作数并留下任何其他内容,从而产生一个数组,假设给定 55+5,将包含 55 和 5,我正在寻找做相反的事情,只有 * 会保留
  • 删除所有不是运算符的内容,然后在每个字符处拆分:str.replaceAll("[^-+/*]","").split("")
  • @WhatTheWhat 你认为我链接的解决方案是什么?
  • 不要使用 split,使用 Matcher#find,正如我在顶部评论中所展示的那样。

标签: java arrays regex


【解决方案1】:

使用

import java.util.*;
import java.util.stream.*;
import java.util.regex.*;

class Test
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String text = "55+6-6*6/6";
        String[] results = Pattern.compile("[+/*-]").matcher(text)
            .results()
            .map(MatchResult::group)
            .toArray(String[]::new);
        System.out.println(Arrays.toString(results)); 
    }
}

Java proof

结果[+, -, *, /]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2012-09-06
    • 2012-07-12
    相关资源
    最近更新 更多