gpt4 book ai didi

java - 针对 char 数组的 Pattern.matches() 而无需在 java 中转换为 String

转载 作者:行者123 更新时间:2023-12-05 08:30:57 25 4
gpt4 key购买 nike

场景

我需要根据字符数组 (char[]) 检查正则表达式模式。出于安全考虑,我不允许将字符数组转换为字符串。 Java 的 Pattern.matches() 方法旨在获取模式和字符串。此外,正则表达式模式是从另一个来源传递给我的,并且会改变(不是恒定的)。

这不起作用:

// 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);

想法

我试图解构正则表达式模式并检查模式每个部分的数组,但解释模式每个部分所需的条件逻辑阻碍了我。例如:假设模式包含类似 "(.){5,10}" 的内容。然后我只需要检查 char[] 长度。但是,如果它包含 "^B(.){5,10}X",那么我需要做一些非常不同的事情。感觉有太多的可能性来有效地解构正则表达式模式并解释每种可能性(这正是我一直只使用 Pattern.matches() 的原因)。

问题

在不将字符数组转换为字符串或创建字符串的情况下,根据字符数组检查正则表达式模式的最有效方法是什么?

最佳答案

Pattern.matches 接受一般的 CharSequence。例如,您可以使用 java.nio 中的 CharBuffer 而不是 String。

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

CharBuffer.wrap 不会在内存中创建额外的密码副本,因此它是所有选项中最安全的。

关于java - 针对 char 数组的 Pattern.matches() 而无需在 java 中转换为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60977992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com