如何将字符串拆分两次并将其添加到链接列表中



我试图拆分一个字符串并将其添加到链表中。链表中的每个节点都是一个多项式边界。我试过这个,但它给了我一个悬空的元字符异常,我做错了什么?

 String s = "X^2+3x+5";
 LinkedList p_list = new LinkedList();
 s.toLowerCase();
 s.replace("*x", "x");
 s.replace("x^", "x");
 s.replaceAll("--","+");
 s.replaceAll("+-", "-");
 s.replaceAll(" ", "");
 String []  st = s.split("(?=[+-])");
 String [] st2 = new String[2];
 for(int i=0;i<=st.length;i++){
    if(st[i].contains("x")){
        st2=st[i].split("x");
        if(st2[0].length()== 0 && st2[1].length()== 0){
            p_list.addFirst(1,1);
        }else if(st2[0].length()== 1 && st2[1].length()== 0){
                p_list.addFirst(Integer.parseInt(st2[0]),0);
        }
    } else {
        p_list.addFirst(Integer.parseInt(st2[0]),Integer.parseInt(st2[1]));
    }

 }  

 p_list.printList();

replace接受字符串,但replaceAll接受正则表达式,并且以+开头的正则表达式无效。你有两个选择:

  • 转义字符+,在Java中为\+
  • 使用Pattern#quote

重要提示:字符串是不可变的,您应该将结果分配给一个新的字符串。

堆栈跟踪非常不言自明:

线程"main"java.util.regex.PatternSyntaxException异常:挂起元索引0附近的字符"+"+-^

您需要转义以下行中的+符号:

s = s.replaceAll("\+-", "-"); // Note: you need to assign the result back to 's'

不是答案(您已经得到了其中的2个),但非常重要的是要注意,String是不可变的,因此操作方法(例如toLowerCasereplace等)将生成一个新字符串,并且不会修改调用它们的String对象,因此将结果分配给您的字符串,以便更改生效,即:

s = s.toLowerCase(); 

首先字符串是不可变的,所以:

String s = "X^2+3x+5";
s.toLowerCase();
s.replaceAll(....)
s.substring(etc ...)

将为您提供与开头声明的字符串相同的字符串。replaceAll()方法将正则表达式作为第一个参数。"*"在正则表达式中具有特殊含义。你需要用\逃离它。

String result = s.toLowerCase().replaceAll("\*x", "x")
                .replace("x^", "x").replaceAll("--", "+")
                .replaceAll("\+-", "-").replaceAll("\+-", "-")
                .replaceAll(" ", "");

最新更新