J'ai une chaîne:
String str = "a + b - c * d / e < f > g >= h <= i == j";
Je veux diviser la chaîne sur tous les opérateurs, mais inclure les opérateurs dans le tableau, de sorte que le tableau résultant ressemble à:
[a , +, b , -, c , *, d , /, e , <, f , >, g , >=, h , <=, i , ==, j]
J'ai ceci actuellement:
public static void main(String[] args) {
String str = "a + b - c * d / e < f > g >= h <= i == j";
String reg = "((?<=[<=|>=|==|\\+|\\*|\\-|<|>|/|=])|(?=[<=|>=|==|\\+|\\*|\\-|<|>|/|=]))";
String[] res = str.split(reg);
System.out.println(Arrays.toString(res));
}
C'est assez proche, ça donne:
[a , +, b , -, c , *, d , /, e , <, f , >, g , >, =, h , <, =, i , =, =, j]
Y a-t-il quelque chose que je puisse faire pour que les opérateurs à plusieurs caractères apparaissent dans le tableau comme je le souhaite?
Et comme question secondaire qui n'est pas aussi importante, y a-t-il un moyen dans l'expression régulière de couper l'espace blanc autour des lettres?
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<res.length; i++) res[i] = i%2==0 ? notops[i/2] : ops[i/2+1];
Cela devrait le faire. Tout est bien stocké dans 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);
}
}
Sortie: + - */<>> = <= ==
Vous pouvez fractionner sur une limite de Word avec\b
Pouvez-vous inverser votre regex ainsi divisé par les caractères non opérationnels?
String ops[] = string.split("[a-z]")
// ops == [+, -, *, /, <, >, >=, <=, == ]
Cela ne renvoie évidemment pas les variables du tableau. Vous pouvez peut-être entrelacer deux divisions (une par les opérateurs, une par les variables)