Skip to content

Commit 677c106

Browse files
authored
feat: optimize convertInSyntax's performance (#450)
Optimise convertInSyntax method by compiling Pattern only once and creating StringBuffer only when needed.
1 parent 747234b commit 677c106

File tree

1 file changed

+12
-9
lines changed
  • src/main/java/org/casbin/jcasbin/util

1 file changed

+12
-9
lines changed

src/main/java/org/casbin/jcasbin/util/Util.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public class Util {
3535
public static boolean enableLog = true;
3636
private static Pattern evalReg = Pattern.compile("\\beval\\(([^),]*)\\)");
3737

38+
private static final Pattern IN_SYNTAX_PATTERN = Pattern.compile("([a-zA-Z0-9_.()\"]*) +in +([a-zA-Z0-9_.()\"]*)");
39+
3840
private static Pattern escapeAssertionRegex = Pattern.compile("\\b(r|p)[0-9]*\\.");
3941

4042
private static Logger LOGGER = LoggerFactory.getLogger("org.casbin.jcasbin");
@@ -144,16 +146,17 @@ public static String escapeAssertion(String s) {
144146
* @return the 'include' expression.
145147
*/
146148
public static String convertInSyntax(String expString) {
147-
String reg = "([a-zA-Z0-9_.()\"]*) +in +([a-zA-Z0-9_.()\"]*)";
148-
Matcher m1 = Pattern.compile(reg).matcher(expString);
149-
StringBuffer sb = new StringBuffer();
150-
boolean flag = false;
151-
while (m1.find()) {
152-
flag = true;
153-
m1.appendReplacement(sb, "include($2, $1)");
149+
Matcher matcher = IN_SYNTAX_PATTERN.matcher(expString);
150+
if (matcher.find()) {
151+
StringBuffer sb = new StringBuffer();
152+
do {
153+
matcher.appendReplacement(sb, "include($2, $1)");
154+
} while (matcher.find());
155+
matcher.appendTail(sb);
156+
return sb.toString();
154157
}
155-
m1.appendTail(sb);
156-
return flag ? sb.toString() : expString;
158+
159+
return expString;
157160
}
158161

159162
/**

0 commit comments

Comments
 (0)