android - 从字符串中删除无效的数字字符

标签 android regex char hashset

我通过删除所有非数字字符保留点“.”来比较版本字符串

oldStr = "Old string v1.9.552.6"
String resultOld = oldStr.replaceAll("[^\\d.]", "");
resultOld = 1.9.552.6

newStr = "New string v2.0.1"
String resultNew = newStr.replaceAll("[^\\d.]", "");
resultNew = 2.0.1

编辑:一些示例字符串:

3C New 2017 program v1.2.3253.2.5beta52 --> should be 1.2.3253.2.552
3C New 2017 program v1.2.3253.2.5 b458 --> should be 1.2.3253.2.5458

我的问题是,有时字符串包含无效的数字字符,这使得比较无效。

newStr = "3New 2017-string v2.0.1"

这将导致以下无效版本字符串:320172.0.1, 所以我的问题是如何从字符串中删除无效的数字字符(3 和 2017),以便获得可以比较的有效版本字符串?

PS:我不知道前面的无效数字字符串,因此它们可以是任何数字。

我已经尝试过比较字符,但我认为我走错了路:

private void removeDuplicates(String oldStr, String newStr) {

        char[] charsNew = newStr.toCharArray();
        char[] charsOld = oldStr.toCharArray();
        Set<Character> NewPresent = new HashSet<>();

        for (int b = 0; b < charsOld.length; b++) {

            if (!Arrays.equals(charsNew, charsOld)) {

                NewPresent.add(charsNew[b]);
                // Just to check output
                Log.w("CHARS", NewPresent.toString());
            }
        }
    }

最佳答案

试试这个

/([\d]+\..*?[^a-zA-Z]*)/g

这是正则表达式 101 演示 https://regex101.com/r/GCs7mb/3

  • 第一个捕获组 ([\d]+..?[^a-zA-Z]) 匹配单个字符 出现在下面的列表中 [\d]+
    • 量词 - 匹配一次和无限次,尽可能多的次数,根据需要返回(贪婪)\d 匹配一个数字(等于 到 [0-9]) 。匹配字符。字面上(区分大小写).*? 匹配任何字符(行终止符除外) ?量词 - 匹配次数为零到无限次,尽可能少的次数,根据需要扩展(惰性) 匹配单个 以下列表中不存在的字符 [^a-zA-Z]
    • 量词 - 匹配次数为零到无限次,尽可能多的次数,根据需要(贪婪)返回 a-z 单个 a(索引 97)和 z(索引 122)之间范围内的字符(case 敏感)A-Z A 之间范围内的单个字符(索引 65) 和 Z(索引 90)(区分大小写)全局模式标志 g 修饰符: 全局的。所有比赛(第一场比赛后不返回)

关于android - 从字符串中删除无效的数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960809/

相关文章:

Android Studio Gradle 构建错误 - Joda 时间

regex - 正则表达式替换为sed

c - 如何在 for 循环中创建一个 char 数组和 2 个 void 18 次,每次都具有不同的名称(数字)?

c++ - 为什么代码不断跳转到 return main();?

android - 如何使用 ToggleButton 执行双向数据绑定(bind)?

java - 使用具有特定 IP 地址的打印机在 Android 中进行打印

regex - 使用 SPARQL 提取包含特定子串的三元组

Char 指针 NULL 终止和内存分配

android - Viewpager fragment 变成空白

regex - Lookbehind 和 Lookaround 概念在 TCL 正则表达式引擎中有用吗?