【问题标题】:Compare a set of numbers in string比较字符串中的一组数字
【发布时间】:2017-05-24 23:51:08
【问题描述】:

我正在尝试为我的应用程序制作某种版本检查器。 我们的想法是比较 2 个字符串中的数字,如果其中一组数字更大,则另一组数字更大。

oldString = 360 some - File v1.52.876 [build 2546]
newString = 360 some - File v1.53.421 [build 2687]

我需要比较两个字符串中的'v'之后的设置数字,因为文件前面也可以有数字(360),如上例所示。 p>

下面的方法检查一个 arraylist (loadTrackedItems),其中包含要检查的文件与 新收到的项目 (checkItemTrack)。

但我无法获得正确的数字。 有没有更好的方法来做到这一点?有人可以这么好心并提供帮助吗?

提前谢谢你。

public static boolean newTrackedVersion(String checkItemTrack) {
        final List<String> tracking = new ArrayList<String>(loadTrackedItems);
        boolean supported = false;
        for (final String u : tracking) {
            if (checkItemTrack.contains(u)) {
                supported = true;

                // get the index of the last 'v' character
                int trackindex = checkItemTrack.lastIndexOf("v");

                String newItem = checkItemTrack.replaceAll("[a-zA-Z]", "").replace("\\s+", "")
                        .replaceAll("[-\\[\\]^/,'*:.!><~@#$%+=?|\"\\\\()]+", "");
                String inList = u.replaceAll("[a-zA-Z]", "").replace("\\s+", "")
                        .replaceAll("[-\\[\\]^/,'*:.!><~@#$%+=?|\"\\\\()]+", "");

                long newTrack = Long.parseLong(newItem.trim());
                long inTrackList = Long.parseLong(inList.trim());

                if (newTrack > inTrackList) {
                    //Toast.makeText(context,"New version found: " + checkItemTrack, Toast.LENGTH_LONG).show();
                    Log.w("NEW VERSION ", checkItemTrack);
                    Log.w("OLD VERSION ", u);
                }
                break;
            }
        }
        return supported;
    }

【问题讨论】:

  • 该字符串有什么确切的格式吗?
  • 嗨,很遗憾,文件名也可以是(新文件 v23.1)或新文件 v2.5.63 或新文件 v5.12.2 [Build 12]
  • 尝试像 String[] 那样拆分字符串 separator = string.split(" ");日期 = 分离[0];ist_time = 分离[1];并比较两个字符串的分隔值 ....
  • @A.Arjun,恐怕不行,因为字符串的格式不准确。字符串中不仅可以有多个空格 2. 示例:newString:这是一个非常新的文件 v2.63.4 [build 26] 这就是为什么我需要在 'v' 之后获取集合此外还可以有字符比如我已经处理过replaceAll的版本号前面的(-,_)。

标签: android string arraylist replace split


【解决方案1】:

如果您只收到两个字符串进行比较,则此解决方案将起作用。

String oldString = "360 some - File v1.52.876 [build 2546]";
String newString = "360 some - File v1.53.421 [build 2687]";
String oldTemp = oldString.substring(oldString.indexOf('v'), oldString.indexOf('[')).trim();
String newTemp = newString.substring(newString.indexOf('v'), newString.indexOf('[')).trim();
int res = newTemp.compareTo(oldTemp);
if(res == 1){
    //newString is higher
}else if(res == 0){
    //both are same
}else if(res == -1){
    //oldString is higher
}

【讨论】:

  • Thx,当字符串中没有内部版本号时,这也有效吗?像要检查的新文件 v1.23.5 因为可能是这种情况,所以我在问题中给出的字符串只是一个困难的例子。
  • java.lang.StringIndexOutOfBoundsException: length=30;区域开始=24; regionLength=-25 在这一行: String newTemp = newString.substring(newString.indexOf('v'), newString.indexOf('[')).trim();
  • @Simon 如果内部版本号是可选的,他们试试这个String oldTemp = oldString.substring(oldString.indexOf('v'), oldString.indexOf('[') != -1 ? oldString.indexOf('[') : oldString.length()).trim(); String newTemp = newString.substring(newString.indexOf('v'), newString.indexOf('[') != -1 ? newString.indexOf('[') : newString.length()).trim();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 2011-08-02
  • 2014-06-11
相关资源
最近更新 更多