java - java中获取值最高的字符串(字符串具有相同的 'base'名称但后缀不同)

标签 java string comparison

我有一个包含一些字符串的列表:

GS_456.java
GS_456_V1.java
GS_456_V2.java
GS_460.java
GS_460_V1.java

事情还在继续。我想要一个包含最高值字符串的列表:

GS_456_V2.java
GS_460_V1.java
.
.
.

我只是想使用大量的 for 语句...但是没有更实用的方法吗?我想避免使用太多 for 语句...因为我在执行一些查询时经常使用它们...

编辑:带有 V1、V2、.... 的字符串是最近创建的类的名称。例如,当有人创建 GS_456 的新版本时,他们会执行此操作并在名称末尾添加其版本。

因此,GS_456_V2 是 GS_456 java 类的最新版本。事情还在继续。

提前致谢。

最佳答案

您将需要分两步处理文件名。

第 1 步:将列表拆分为子列表,每个文件名一个子列表(忽略后缀)。 下面是将列表拆分为 Map 的示例:

 private static Map> nameMap = new HashMap>();

    private static void splitEmUp(final List names)
    {
        for (String current : names)
        {
            List listaly;
            String[] splitaly = current.split("_|\\.");

            listaly = nameMap.get(splitaly[1]);
            if (listaly == null)
            {
                listaly = new LinkedList();
                nameMap.put(splitaly[1], listaly);
            }

            listaly.add(current);
        }

第 2 步:找到每个名称的最高前缀。这是一个例子:

 private static List findEmAll()
    {
        List returnValue = new LinkedList();

        Set keySet = nameMap.keySet();
        for (String key : keySet)
        {
            List listaly = nameMap.get(key);
            String highValue = null;

            if (listaly.size() == 1)
            {
                highValue = listaly.get(0);
            }
            else
            {
                int highVersion = 0;

                for (String name : listaly)
                {
                    String[] versions = name.split("_V|\\.");

                    if (versions.length == 3)
                    {
                        int versionNumber = Integer.parseInt(versions[1]);
                        if (versionNumber > highVersion)
                        {
                            highValue = name;
                            highVersion = versionNumber;
                        }
                    }
                }
            }

            returnValue.add(highValue);
        }

        return returnValue;
    }

关于java - java中获取值最高的字符串(字符串具有相同的 'base'名称但后缀不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137549/

相关文章:

java - JavaPlot 中的 "With lines"?

java - 使用 XMLScanner 反序列化 xml 导致输出字符串更大

java - 使用相对路径读取 JAR 中的文件

c# - 如何使用通配符删除字符串的特定部分?

c# - 将内存流与文件 C# .NET 进行比较的最有效方法

linux - 比较2个目录并将差异复制到目录3

java - 在类中为自己的字段使用 getter/setter 有什么好处吗?

在 C 语言的替换程序中成功进行初始输入后,无法输入第二个输入

python - 测试浮点相等

python - 如何从aiohttp中的url获取查询字符串参数?