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] + "]");
}
}