gpt4 book ai didi

java - 我将如何用正则表达式拆分这个表达式?

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

我正在求解一个方程,但我想使用常量来编写我的解决方案。

我正在研究的方法称为分解,它将方程分解为常数。问题是,当我拆分时,具有负常数的方程将产生一个具有常数绝对值的数组。如何在仍然使用正则表达式的同时获得减号?

如果输入是ax+by=c,输出应该是{a,b,c}

有用的奖励:有没有办法删除我拆分时创建的空元素。例如,如果我输入等式 2x+3y=6,我最终会得到一个包含元素 {2,,3,,6} 的“原始”数组/p>

代码:

public static int[] decompose(String s)
{
s = s.replaceAll(" ", "");

String[] termRaw = s.split("\\D"); //Splits the equation into constants *and* empty spaces.
ArrayList<Integer> constants = new ArrayList<Integer>(); //Values are placed into here if they are integers.
for(int k = 0 ; k < termRaw.length ; k++)
{
if(!(termRaw[k].equals("")))
{
constants.add(Integer.parseInt(termRaw[k]));
}

}
int[] ans = new int[constants.size()];

for(int k = 0 ; k < constants.size(); k++) //ArrayList to int[]
{
ans[k] = constants.get(k);
}
return ans;
}

最佳答案

这个答案的一般策略是按运算符拆分输入方程,然后循环提取系数。但是,有几个边缘情况需要考虑:

  • 加号 (+) 加在每个未作为第一项出现的减号之前
  • 拆分后,通过查看空字符串检测正1的系数
  • split 后,负一的系数通过看减号来检测


String input = "-22x-77y+z=-88-10+33z-q";
input = input.replaceAll(" ", "") // remove whitespace
.replaceAll("=-", "-"); // remove equals sign
.replaceAll("(?<!^)-", "+-"); // replace - with +-, except at start of line
// input = -22x+-77y+z+-88+-10+33z+-

String[] termRaw = bozo.split("[\\+*/=]");
// termRaw contains [-22x, -77y, z, -88, -10, 33z, -]

ArrayList<Integer> constants = new ArrayList<Integer>();
// after splitting,
// termRaw contains [-22, -77, '', -88, -10, 33, '-']
for (int k=0 ; k < termRaw.length ; k++) {
termRaw[k] = termRaw[k].replaceAll("[a-zA-Z]", "");
if (termRaw[k].equals("")) {
constants.add(1);
}
else if (termRaw[k].equals("-")) {
constants.add(-1);
}
else {
constants.add(Integer.parseInt(termRaw[k]));
}
}

关于java - 我将如何用正则表达式拆分这个表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071144/

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