From dd3593b2754a4670103f66a47caf7004da90316b Mon Sep 17 00:00:00 2001 From: burningtnt Date: Thu, 21 Dec 2023 21:57:48 +0800 Subject: [PATCH] Convert Pattern implementation to general java implementation. --- .../hmcl/util/platform/OperatingSystem.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 8990840b1e..ea12f3383f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -143,12 +143,45 @@ public String getCheckedName() { try { Process process = Runtime.getRuntime().exec(new String[]{"cmd", "ver"}); try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), NATIVE_CHARSET))) { - Matcher matcher = Pattern.compile("(?[0-9]+\\.[0-9]+\\.(?[0-9]+)(\\.[0-9]+)?)]$") - .matcher(reader.readLine().trim()); - - if (matcher.find()) { - versionNumber = matcher.group("version"); - buildNumber = Integer.parseInt(matcher.group("build")); + final String input = reader.readLine(); + parseLoop: + for (int i = input.length() - 1; i >= 0; i--) { + char c = input.charAt(i); + if (c > ' ') { + if (c != ']') { + break; + } + final int end = i; + for (i --; i >= 0; i--) { + c = input.charAt(i); + if (c < '0' || c > '9') { + if (c != '.') { + break parseLoop; + } + int calcBN = 0, times = 1; + for (i --; i >= 0; i--) { + c = input.charAt(i); + if (c >= '0' && c <= '9') { + calcBN += (c - '0') * times; + times *= 10; + } else if (c == '.') { + for (i --;i >= 0;i --) { + c = input.charAt(i); + if ((c < '0' || c > '9') && c != '.') { + versionNumber = input.substring(i + 1, end); + buildNumber = calcBN; + break parseLoop; + } + } + } else { + break parseLoop; + } + } + break parseLoop; + } + } + break; + } } } process.destroy();