gpt4 book ai didi

java - 使用 ArrayList 拆分方程式

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:38 25 4
gpt4 key购买 nike

如果我输入如下等式:

9+3*2/1

我的输出是:

[9,3,2,1] 
[,+,*,/]

为什么我的第二个数组以“,”开头,我该如何去掉它以便输出为

[+,*,/]
String evaluate(String exp) {

String setExpression = expr.getText();

String[] numbers = setExpression.split("[*/+-]");
String[] ops = setExpression.split("[123456789]");

ArrayList <String> setNumbers = new ArrayList <String>();
ArrayList <String> setOps = new ArrayList <String>();


for(int i=0; i<numbers.length; i++){
setNumbers.add(numbers[i]);
}

for(int i=0; i<numbers.length; i++){
setOps.add(ops[i]);
}

System.out.println(setNumbers);
System.out.println(setOps);

return exp;
}
}

最佳答案

一个类似于你的例子:

public class DemoSplit  {   
public static void main(String[] args) {
String s = ",1,2,";
String su[] = s.split(",");
for (String st: su) System.out.println("'"+st+"'");
}
}

将打印:

''
'1'
'2'

第一个字符是一个分隔符,所以在那里拆分,它之前的元素是拆分数组的第一个元素。

在你的情况下,你 split 了数字:

9+3*2/1

9之前,空元素,'+'之后...

如果您想查看代码,String.split电话 java.util.regex.Pattern.split

在 split 方法中,您会看到将索引和匹配项之间的子字符串添加到 ArrayList,因为第一次迭代时索引为零,并且示例中的第一个匹配项为零,因此第一个元素是空字符串.来自split方法的源码:

    ArrayList<String> matchList = new ArrayList<String>();
Matcher m = matcher(input);

// Add segments before each match found
while(m.find()) {
if (!matchLimited || matchList.size() < limit - 1) {
String match = input.subSequence(index, m.start()).toString();
matchList.add(match);
index = m.end();
} else if (matchList.size() == limit - 1) { // last one
String match = input.subSequence(index,
input.length()).toString();
matchList.add(match);
index = m.end();
}
}

关于java - 使用 ArrayList 拆分方程式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com