Je sais, je sais, maintenant j'ai deux problèmes 'n tout cela, mais regex signifie ici que je n'ai pas besoin d'écrire deux boucles compliquées. Au lieu de cela, j'ai une regex que seulement je comprends, et je serai employé pour yonks.Java replaceAll() & split() irrégularités
J'ai une chaîne, par exemple stack.overflow.questions[0].answer[1].postDate
, et j'ai besoin d'obtenir le [0] et le [1], de préférence dans un tableau. "Facile!" mes neurones s'exclamé, il suffit d'utiliser regex et la méthode split
sur votre chaîne d'entrée; donc je suis venu avec ceci:
String[] tokens = input.split("[^\\[\\d\\]]");
qui a produit les éléments suivants:
[, , , , , , , , , , , , , , , , [0], , , , , , , [1]]
cher Oh. Donc, je pensais, "ce qui replaceAll
faire dans ce cas?":
String onlyArrayIndexes = input.replaceAll("[^\\[\\d\\]]", "");
qui a produit:
[0][1]
Hmm. Pourquoi ça? Je cherche un tableau de chaînes de deux éléments qui contient "[0]" comme premier élément et "[1]" comme le second. Pourquoi split ne fonctionne pas ici, quand les Javadocs déclarent qu'ils utilisent tous les deux la classe Pattern selon le Javadoc?
Pour résumer, j'ai deux questions: pourquoi le produit d'appel split()
que grand tableau avec des espaces apparemment aléatoires et suis-je raison de penser le replaceAll fonctionne parce que l'expression rationnelle remplace tous les caractères qui ne correspondent pas « [ », un nombre et "]"? Qu'est-ce qui me manque, cela signifie que je m'attends à ce qu'ils produisent une sortie similaire (OK, c'est trois, et s'il vous plaît ne répondez pas "un indice?" À celui-ci!).
Merci, c'est le fait que split me donne un élément dans le tableau pour chaque match de mon regex; c'est ce que je ne comprenais pas! –