Java String.split () Regex

Ho una stringa:

String str = "a + b - c * d / e  g >= h <= i == j"; 

Voglio dividere la stringa su tutti gli operatori, ma includere gli operatori nella matrice, quindi l’array risultante assomiglia a:

 [a , +, b , -, c , *, d , /, e , , g , >=, h , <=, i , ==, j] 

Ho questo al momento:

 public static void main(String[] args) { String str = "a + b - c * d / e  g >= h <= i == j"; String reg = "((?<=[=|==|\\+|\\*|\\-||/|=])|(?=[=|==|\\+|\\*|\\-||/|=]))"; String[] res = str.split(reg); System.out.println(Arrays.toString(res)); } 

Questo è abbastanza vicino, dà:

 [a , +, b , -, c , *, d , /, e , , g , >, =, h , <, =, i , =, =, j] 

C’è qualcosa che posso fare per fare in modo che gli operatori di personaggi multipli compaiano nell’array come li voglio?

E come una domanda secondaria che non è altrettanto importante, c’è un modo nella regex di tagliare lo spazio bianco fuori dalle lettere?

 String[] ops = str.split("\\s*[a-zA-Z]+\\s*"); String[] notops = str.split("\\s*[^a-zA-Z]+\\s*"); String[] res = new String[ops.length+notops.length-1]; for(int i=0; i 

Questo dovrebbe farlo. Tutto ben conservato in res .

 str.split (" ") res27: Array[java.lang.String] = Array(a, +, b, -, c, *, d, /, e, <, f, >, g, >=, h, <=, i, ==, j) 
  String str = "a + b - c * d / e < f > g >= h <= i == j"; String reg = "\\s*[a-zA-Z]+"; String[] res = str.split(reg); for (String out : res) { if (!"".equals(out)) { System.out.print(out); } } 

Uscita: + - * / <>> = <= ==

Puoi dividere il limite di una parola con \ b

Puoi invertire la regex così divisa dai caratteri non operativi?

 String ops[] = string.split("[az]") // ops == [+, -, *, /, <, >, >=, <=, == ] 

Questo ovviamente non restituisce le variabili nell'array. Forse puoi interlacciare due split (uno per gli operatori, uno per le variabili)

Potresti anche fare qualcosa del tipo:

 String str = "a + b - c * d / e < f > g >= h <= i == j"; String[] arr = str.split("(?<=\\G(\\w+(?!\\w+)|==|<=|>=|\\+|/|\\*|-|(<|>)(?!=)))\\s*"); 

Gestisce spazi bianchi e parole di lunghezza variabile e produce l’array:

 [a, +, b, -, c, *, d, /, e, <, f, >, g, >=, h, <=, i, ==, j]