2013-04-25 18 views
27

Denklem Dize girişinden denklemlerle başa çıkacak basit bir program yapıyorum, ancak çalıştırdığımda bir istisna alıyorum. Bir "+" ile "+" yani dizeleri boşluklara bölebilirim. Bu özel karakterleri değiştirmek içinBir meta karakterde String.split()

dize replaceAll yöntemini kullanmaya nasıl başlamalıyım? Aşağıda "ana" java.util.regex.PatternSyntaxException dizisindeki

İstisna benim kodudur: 0 + ^

public static void parse(String x){ 
     String z = "x^2+2=2x-1"; 

     String[] lrside = z.split("=",4); 
     System.out.println("Left side: " + lrside[0] + "/Right Side: " + lrside[1]); 
     String rightside = lrside[0]; 
     String leftside = lrside[1]; 

     rightside.replaceAll("-", " -"); 
     rightside.replaceAll("+", " +"); 
     leftside.replaceAll("-", " -"); leftside.replaceAll("+", " +"); 
     List<String> rightt = Arrays.asList(rightside.split(" ")); 
     List<String> leftt = Arrays.asList(leftside.split(" ")); 

     System.out.println(leftt); 
     System.out.println(rightt); 
+6

'+', bir normal ifadede bir meta karakterdir, normal ifadede "\\ +" ifadesini kullanır. –

cevap

43

replaceAll normal bir ifade olarak kabul indeksi yakın meta karakter '+' Sarkan ilk argümanı. , bir veya daha fazla yineleme anlamına gelen bir niceleyiciyi ifade eden özel bir karakterdir. Bu nedenle edebi karakteri + belirtmek için kaçtı edilmelidir:

rightside = rightside.replaceAll("\\+", " +"); 

(o replaceAll sonucuna değişkeni atamak için gereklidir böylece Karakter dizileri değişmez);

Buna bir alternatif, meta durumunu ortadan kaldıran bir character class kullanmaktır

:

rightside = rightside.replace("+", " +"); 
:

rightside = rightside.replaceAll("[+]", " +"); 

basit çözüm da olmayan normal ifade String değişmezleri kullanan replace yöntemi kullanmak olacaktır

+0

Teşekkürler, mükemmel çalıştı. Ben de başarı ile rightside.replace ("+", "+") denedim ama bu neden çalıştı emin değilim. – apache

+0

' rightside.replace ("+", "+") '' string.replace' olarak çalıştı, hedef (1.) argümanında normal bir ifade kullanmaz ..... – Reimeus

1

String#replaceAll, regex girişini bekler ve + uygun desen değil, \\+ desen olur. rightside.replaceAll("\\+", " +");

2

regex = "?" ile benzer bir sorun yaşadım. Bir ifadede bir anlamı olan tüm özel karakterler için olur. Bu nedenle, regex'iniz için bir önek olarak "\\" olmalıdır.

rightside = rightside.replaceAll("\\+", " +");