(Pattern.matches) contre un tableau de caractères sans fonte à cordes en java

humbleDev:

Scénario

Je dois vérifier un modèle regex contre un tableau de caractères ( char[]). Je ne suis pas autorisé à lancer le tableau de caractères à une chaîne, en raison de considérations de sécurité. Méthode Pattern.matches () de Java est conçu pour un modèle et une chaîne. En outre, le modèle regex est passé à moi d' une autre source, et va changer (n'est pas constante).

Cela ne fonctionne pas:

// This pattern comes from another source, that I do not control. It may change.
String pattern = "^(.)\\1+$"; 

char[] exampleArray = new char[4];
    exampleArray[0] = 'b';
    exampleArray[1] = 'l';
    exampleArray[2] = 'a';
    exampleArray[3] = 'h';

// This should return true, for this pattern, but I cannot pass in a char[].
boolean matches = Pattern.matches(pattern, exampleArray); 

Pensées

J'ai essayé de déconstruire le modèle de regex et d' examiner le tableau pour chaque partie du motif, mais la logique conditionnelle nécessaire pour interpréter chaque partie du motif me contrariée. Par exemple: Supposons que le modèle contient quelque chose comme "(.){5,10}". Alors je ne dois vérifier la char[]longueur. Cependant, si elle contient "^B(.){5,10}X", alors je dois faire quelque chose de très différent. Il se sent comme il y a trop de possibilités de déconstruire efficacement le modèle de regex et compte pour chaque possibilité ( ce qui est exactement la raison pour laquelle je suis toujours juste utilisé Pattern.matches()).

Question

Quelle serait la façon la plus efficace de vérifier un modèle regex contre un tableau de caractères sans jeter le tableau de caractères à une chaîne, ou la création d'une chaîne?

Joni:

Pattern.matches accepte un CharSequence général. Vous pouvez par exemple utiliser CharBuffer de java.nio au lieu de String.

boolean matches = Pattern.matches(pattern, CharBuffer.wrap(exampleArray));

CharBuffer.wrap ne crée pas une copie supplémentaire du mot de passe en mémoire, de toutes les options, il est le plus sûr.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=394611&siteId=1
conseillé
Classement