我想知道一些事情。我有功课,他们希望我们以多项式形式输入两个字符串输入,并且有很多实现。在这里我的问题是:当我从用户那里获取输入时,我可以将字符串拆分为多项式部分,但它出错了:
字符串:"-x^3 - 6x^2 + 4x + 22"
我想把它拆分成:
-x^3
- 6x^2
+ 4x
+ 22
但打印
package splitmethod;
import java.util.Scanner;
import java.io.*;
public class uygulama {
public static void main(String args[]){
System.out.println("lütfen parçalmak istidigniz polinomu girniz ");
Scanner input= new Scanner(System.in);
String polinom= input.nextLine();
String[] result;
System.out.println("");
result=polinom.replaceAll("\\s+","").split("(?<=[+-])");
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
答案 0 :(得分:1)
(?<=[+-])
表示在前面有+
或-
的地方进行拆分。所以对于像-x^3-6x^2+4x+22
这样的数据你在这里分裂(我会用|
标记这个地方)
-|x^3-|6x^2+|4x+|22
你想要的是在+
或-
之后拆分(并且不要在-
或{{ 1}}放置在整个字符串的开头)。因此,您需要使用预见+
而不是后视(?<=...)
。
示例:(?=...)
其中|-x^3|-6x^2|+4x|+22
表示要拆分的位置。如您所见,我还将|
放在字符串的开头,因为它后面有|
或+
。
因此,请尝试使用-
如果您使用的是Java 8,您将得到正确的结果,因为zero-length(或零宽度)正则表达式匹配(如来自环视机制的那个),empty strings at start of result arrays are removed因此您不会结束使用split("(?=[+-])")
数组,但是
["", "-x^3", "-6x^2", "+4x", "+22"]
。
如果您使用的是早期版本的Java,则需要添加条件以防止在["-x^3", "-6x^2", "+4x", "+22"]
元素之前匹配此|
。您可以通过向正则表达式添加-x^3
来确保匹配位置(在您的情况下为拆分位置)在字符串开始后不正确(由(?<!^)
表示):
因此,在Java 8之前的版本中使用^
避免由于在String的开始处在split("(?=[+-])(?<!^)")
上拆分而可能返回的空字符串的其他方法是使用另一个Scanner类实例和分隔符-
,它将解析&#34;&#34;解析&#34} ;来自用户的输入,因此您的代码可能看起来像
(?=[+-])
输出:
String polinom = "-x^3 - 6x^2 + 4x + 22";//here you pass data from user
Scanner scanner = new Scanner(polinom);
scanner.useDelimiter("(?=[+-])");
while (scanner.hasNext())
System.out.println(scanner.next());
scanner.close();
答案 1 :(得分:0)
我实际上并不认为您需要使用regex
。只需遍历String
就足够了,检查+/-
就足够了。类似的东西:
StringBuilder sb = new StringBuilder();
for(int i=0;i<polinom.length;i++) {
if(i!=0 && (polinom.charAt(i)=='-' || polinom.charAt(i)=='+')) {
System.out.println(sb.toString());
sb = new StringBuilder();
sb.append(polinom.charAt(i));
} else {
sb.append(polinom.charAt(i));
}
}
System.out.println(sb.toString());
所以基本上你缓冲polinom
,当你遇到+
或-
时,你知道多项式中的一个项已经结束。所以你打印缓冲区并启动一个新的缓冲区。
答案 2 :(得分:0)
正则表达式"(?<=[+-])"
是&#34;正向背后&#34;。这意味着它会在<{1}}或+
之后分开。你需要&#34;积极向前看&#34;,-
。
但是,无论如何,当您在执行此操作之前删除空格时,您将获得"(?=[+-])"
和+
,而它们与操作数之间没有任何空格,
-
这不是你想说的。就个人而言,为了解析中缀操作,我会选择按空格分割,以便操作符与实际术语分开。
答案 3 :(得分:0)
import java.util.Scanner;
public class uygulama {
public static void main(String args[]) {
System.out.println("lütfen parçalmak istidigniz polinomu girniz ");
Scanner input= new Scanner(System.in);
String polinom= input.nextLine();
String[] result;
System.out.println("");
result = polinom.split(" "); //just splits the words by space so the signs in front are not stored in the same array as the addressed variable/coefficient combo
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}