Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 比较字符串中的一组数字_Android_String_Arraylist_Replace_Split - Fatal编程技术网

Android 比较字符串中的一组数字

Android 比较字符串中的一组数字,android,string,arraylist,replace,split,Android,String,Arraylist,Replace,Split,我正在尝试为我的应用程序制作某种版本检查器。 这个想法是比较两个字符串中的数字,如果一组数字比另一组大,那么就会找到一个新的版本 oldString = 360 some - File v1.52.876 [build 2546] newString = 360 some - File v1.53.421 [build 2687] 我需要的是比较两个字符串中“v”之后的集合数字,因为文件前面也可能有数字(360),如上面的示例所示 下面的方法检查一个数组列表(loadTrackedItems)

我正在尝试为我的应用程序制作某种版本检查器。 这个想法是比较两个字符串中的数字,如果一组数字比另一组大,那么就会找到一个新的版本

oldString = 360 some - File v1.52.876 [build 2546]
newString = 360 some - File v1.53.421 [build 2687]
我需要的是比较两个字符串中“v”之后的集合数字,因为文件前面也可能有数字(360),如上面的示例所示

下面的方法检查一个数组列表(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;
    }
public静态布尔newtrackdVersion(字符串checkItemTrack){
最终列表跟踪=新的ArrayList(loadTrackedItems);
支持布尔值=false;
用于(最终字符串u:跟踪){
if(checkItemTrack.contains(u)){
支持=正确;
//获取最后一个“v”字符的索引
int trackindex=checkItemTrack.lastIndexOf(“v”);
String newItem=checkItemTrack.replaceAll(“[a-zA-Z]”,“”)。replace(“\\s+”,“”)

.replaceAll(“[-\[\]^/,”*:。!>如果您只收到两个字符串进行比较,此解决方案将起作用,请尝试

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
}

该字符串有任何精确格式吗?嗨,不幸的是没有,文件名也可以是(新文件v23.1)或新文件v2.5.63或新文件v5.12.2[Build 12]尝试拆分字符串,如string[]separated=string.split(“”);date=separated[0];ist_time=separated[1];并比较两个字符串的分隔值…@A.Arjun,恐怕不行,因为字符串没有精确的格式。字符串中可能有多个空格,而不仅仅是2。示例:newString:这是一个非常新的文件v2.63.4[build 26],这就是为什么我需要在“v”之后获取集合的原因。此外,还可以有类似(-,\ux)的字符在我已经处理过的replaceAll.Thx版本号之前,当字符串中没有内部版本号时,这也可以工作?就像检查v1.23.5的新文件一样,因为可能是这种情况,我在问题中给出的字符串只是困难的字符串的示例。java.lang.StringIndexOutOfBoundsException:length=30;regionStart=24;RegionLength这一行的h=-25:String newTemp=newString.substring(newString.indexOf('v')、newString.indexOf('[')).trim();@Simon如果内部版本号是可选的,他们会尝试这个
String oldTemp=oldString.substring(oldString.indexOf('v')、oldString.indexOf('[')!=-1?oldString.indexOf('['):oldstrim());字符串newTemp=newString.substring(newString.indexOf('v')、newString.indexOf('[')!=-1?newString.indexOf('['):newString.length()).trim();