gpt4 book ai didi

java - 以中缀形式分割字符串

转载 作者:行者123 更新时间:2023-12-01 12:16:39 24 4
gpt4 key购买 nike

有件事我想知道。我有作业,他们希望我们以多项式形式输入两个字符串,并且有很多实现。这是我的问题:当我从用户那里获取输入时,我可以将字符串拆分为多项式部分,但它出错了:

字符串:“-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]);

最佳答案

(?<=[+-])意味着在有 + 的地方进行分割或- 在它之前。因此对于像 -x^3-6x^2+4x+22 这样的数据你们在这里 split (我会用 | 标记这个地方)

-|x^3-|6x^2+|4x+|22

你想要的是在有 + 的地方进行分割或- 在它之后(并且不要在整个字符串开头的 -+ 上进行分割)。所以不要向后看 (?<=...)你需要使用前瞻 (?=...) .

示例:|-x^3|-6x^2|+4x|+22哪里|代表 split 的地方。正如你所看到的,我还放置了 |在字符串的开头,因为它有 +-在它之后。

所以尝试使用split("(?=[+-])")

如果您使用的是 Java 8,您将获得正确的结果,因为 zero-length (或零宽度)正则表达式匹配(如环视机制中的匹配),empty strings at start of result arrays are removed所以你最终不会得到 ["", "-x^3", "-6x^2", "+4x", "+22"]数组但是
["-x^3", "-6x^2", "+4x", "+22"] .

如果您使用的是早期版本的 Java,则需要添加条件以防止首先匹配 |之前-x^3元素。您可以通过添加(?<!^)来做到这一点到您的正则表达式,以确保匹配位置(在您的情况下是拆分位置)不在字符串开头之后(由 ^ 表示):

因此在 Java 8 之前的版本中使用 split("(?=[+-])(?<!^)")

<小时/>

避免因 - 分割而返回空字符串的其他方法在 String 的开头是使用带有分隔符 (?=[+-]) 的 Scanner 类的另一个实例它将“解析”用户的输入,因此您的代码可能如下所示

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();

输出:

-x^3 
- 6x^2
+ 4x
+ 22

关于java - 以中缀形式分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26958591/

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