Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式不在第一个索引中存储元素_Java_Regex - Fatal编程技术网

Java 正则表达式不在第一个索引中存储元素

Java 正则表达式不在第一个索引中存储元素,java,regex,Java,Regex,我有一个函数,它接受一个包含数学表达式的字符串,例如6+9*8或4+9,并从左到右对其求值(没有正常的操作规则顺序) 在过去的几个小时里,我一直在处理这个问题,最终找到了罪魁祸首,但我不知道它为什么会这样做。当我通过正则表达式(.split(\\d”)和.split(\\d”))拆分字符串时,我将其分成两个数组,一个是int[],其中包含表达式中涉及的数字,另一个是string[],其中包含操作 我意识到当我做以下事情时: String question = "5+9*8"; String[]

我有一个函数,它接受一个包含数学表达式的字符串,例如
6+9*8
4+9
,并从左到右对其求值(没有正常的操作规则顺序)

在过去的几个小时里,我一直在处理这个问题,最终找到了罪魁祸首,但我不知道它为什么会这样做。当我通过正则表达式(
.split(\\d”)
.split(\\d”)
)拆分字符串时,我将其分成两个数组,一个是
int[]
,其中包含表达式中涉及的数字,另一个是
string[]
,其中包含操作

我意识到当我做以下事情时:

String question = "5+9*8";
String[] mathOperations = question.split("\\d");
for(int i = 0; i < mathOperations.length; i++) {
    System.out.println("Math Operation at " + i + " is " + mathOperations[i]);
}

因为在
mathOperations
的位置0上有一个空字符串。换句话说

mathOperations = {"", "+", "*"};
根据
split

此方法返回的数组包含此函数的每个子字符串 由与给定字符串匹配的另一个子字符串终止的字符串 表达式或由字符串结尾终止

为什么数组末尾没有空字符串

因此,结果中不包括尾随的空字符串 数组

更详细的解释-您的正则表达式与字符串匹配如下:

"(5)+(9)*(8)" -> "" + (5) + "+" + (9) + "*" + (8) + ""
但按照文档的规定,将丢弃尾随的空字符串。 (希望这个愚蠢的例子有帮助)

另外值得注意的是,您使用的正则表达式
“\\d”
,将以下字符串
“55+5”
拆分为

["", "", "+"]

这是因为您只匹配一个字符,您可能应该使用
“\\d+”

您可能会发现以下程序变体很有用,因为一次拆分可以完成两个任务

public class zw {
    public static void main(String[] args) {
            String question = "85+9*8-900+77";
            String[] bits = question.split("\\b");
            for (int i = 0; i < bits.length; ++i) System.out.println("[" + bits[i] + "]");
    }
}
公共类zw{
公共静态void main(字符串[]args){
字符串question=“85+9*8-900+77”;
字符串[]位=问题。拆分(\\b”);
对于(int i=0;i
其输出:

[]
[85]
[+]
[9]
[*]
[8]
[-]
[900]
[+]
[77]

在这个程序中,我使用
\b
作为“零宽度边界”进行分割。在分割过程中没有人物受到伤害,他们都进入了阵阵

更多信息请点击此处:
在这里:

您能详细介绍一下拆分文档吗。我很难理解这一点definition@TarikhChouhan我对我的回答补充了进一步的观察
public class zw {
    public static void main(String[] args) {
            String question = "85+9*8-900+77";
            String[] bits = question.split("\\b");
            for (int i = 0; i < bits.length; ++i) System.out.println("[" + bits[i] + "]");
    }
}