Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String - Fatal编程技术网

Java 读取多项式-改变字符串中的间距

Java 读取多项式-改变字符串中的间距,java,string,Java,String,是否有一个正则表达式可以将字符串中的不均匀间距转换为偶数间距(对于多项式) 类似于“x^2+x-3+2x^-4”到“x^2+x-3+2x^-4”(每个术语之间只有一个空格)。为了便于理解,我将regex语句分解。第一个regex语句仅用一个空格替换多个空格。接下来的两个检查+/-前面是否没有空格,并添加空格。最后两个正则表达式检查相反的地方,如果+/-后面没有空格,它会添加一个空格 str=str.replaceAll(“+”,”); str=str.replaceAll(“(?为了便于理解,我

是否有一个正则表达式可以将字符串中的不均匀间距转换为偶数间距(对于多项式)


类似于
“x^2+x-3+2x^-4”
“x^2+x-3+2x^-4”
(每个术语之间只有一个空格)。

为了便于理解,我将regex语句分解。第一个regex语句仅用一个空格替换多个空格。接下来的两个检查+/-前面是否没有空格,并添加空格。最后两个正则表达式检查相反的地方,如果+/-后面没有空格,它会添加一个空格

str=str.replaceAll(“+”,”);

str=str.replaceAll(“(?为了便于理解,我将regex语句分解。第一个regex语句将多个空格替换为一个空格。接下来的两个语句检查+/-前面是否有空格,并添加一个空格。最后两个regex检查相反方向,如果+/-后面没有空格,则添加一个空格

str=str.replaceAll(“+”,”);

str=str.replaceAll(“(?您可以尝试以下方法:

String[] useCases = {"x^2 + 5x -3 +2x^-4",
        "x^5-4x+4x^3+4",
        "x^5- 4x+4x^3+4",
        "x^5-4x +4x^3+4",
        "x^5-4x +4x^3+ 4"
};
for(String s : useCases) {
    System.out.printf("%-22s",s);
    s = s.replaceAll("\\s*((\\d*[a-z]+\\^[+-]*\\d+)|(\\d*[a-z])|(\\d)+|([+-\\/*]))\\s*", "$1 ");
    s = s.strip();
    System.out.println("-> "+ s );
}
输出:

x^2 + 5x -3 +2x^-4    -> x^2 + 5x - 3 + 2x^-4
x^5-4x+4x^3+4         -> x^5 - 4x + 4x^3 + 4
x^5- 4x+4x^3+4        -> x^5 - 4x + 4x^3 + 4
x^5-4x +4x^3+4        -> x^5 - 4x + 4x^3 + 4
x^5-4x +4x^3+ 4       -> x^5 - 4x + 4x^3 + 4

根据需要修改代码。

您可以尝试以下方法:

String[] useCases = {"x^2 + 5x -3 +2x^-4",
        "x^5-4x+4x^3+4",
        "x^5- 4x+4x^3+4",
        "x^5-4x +4x^3+4",
        "x^5-4x +4x^3+ 4"
};
for(String s : useCases) {
    System.out.printf("%-22s",s);
    s = s.replaceAll("\\s*((\\d*[a-z]+\\^[+-]*\\d+)|(\\d*[a-z])|(\\d)+|([+-\\/*]))\\s*", "$1 ");
    s = s.strip();
    System.out.println("-> "+ s );
}
输出:

x^2 + 5x -3 +2x^-4    -> x^2 + 5x - 3 + 2x^-4
x^5-4x+4x^3+4         -> x^5 - 4x + 4x^3 + 4
x^5- 4x+4x^3+4        -> x^5 - 4x + 4x^3 + 4
x^5-4x +4x^3+4        -> x^5 - 4x + 4x^3 + 4
x^5-4x +4x^3+ 4       -> x^5 - 4x + 4x^3 + 4

根据您的需要修改代码。

我想他希望将
2x^-4
作为一个单独的单元。@onkarruikar啊,我现在看到了,我没有注意到那里缺少空格,我想他希望将
2x^-4
作为一个单独的单元。@onkarruikar啊,我现在看到了,我没有注意到那里缺少空格。谢谢,它几乎可以工作,只是它不允许任何空格变量的系数不是1。例如“x^2+5x-3+2x^-4”这个字符串将3个系数与变量x分开。有没有办法在正则表达式中解决这个问题。
5x-3
5(x-3)
不同。请详细说明。我指的是第一个。5x-3,不要担心括号(至少我的程序不需要它)更改了表达式以处理更多用例。谢谢,它几乎可以工作,只是它不允许变量使用除1以外的任何系数。例如“x^2+5x-3+2x^-4”这个字符串将3系数从变量x中分离出来。是否有一种方法可以在正则表达式中解决这个问题。
5x-3
5(x-3)
不同。请详细说明。我指的是第一个。5x-3,不用担心括号(至少我的程序不需要它)更改表达式以处理更多用例。