2017-01-10 3 views
0

Я пытаюсь сделать кое-что из версии checker для моего приложения. Идея состоит в том, чтобы сравнить числа из 2 строк, и если один набор чисел больше, чем другой, новая версия была найдена.Сравните набор чисел в строке

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

Что мне нужно, чтобы сравнить набор номера после «V» в обеих строках, как там также могут быть числа (360) в передней части файла, как показано в приведенном выше примере.

Ниже метод проверяет Список_массивов (loadTrackedItems), который содержит файлы, подлежащие проверке Agains на вновь принятого пункта (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("[-\\[\\]^/,'*:.!><[email protected]#$%+=?|\"\\\\()]+", ""); 
       String inList = u.replaceAll("[a-zA-Z]", "").replace("\\s+", "") 
         .replaceAll("[-\\[\\]^/,'*:.!><[email protected]#$%+=?|\"\\\\()]+", ""); 

       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; 
    } 
+0

Есть ли какой-либо точный формат этой строки? –

+0

Привет, к сожалению, имя файла также может быть (новый файл v23.1) или новый файл v2.5.63 или новый файл v5.12.2 [Build 12] – Simon

+0

попытайтесь разделить строку как String [] separated = string.split («»); date = separate [0]; ist_time = отделено [1]; и сравните разделенные значения двух строк .... –

ответ

0

если вы получили только две строки, чтобы сравнить это решение, попробуйте его.

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 
} 
+0

Thx, это также работает, когда в строке нет номера сборки? Как новый файл для проверки v1.23.5 Так как это может быть так, мои заданные строки в вопросах являются лишь примерами сложного. – Simon

+0

java.lang.StringIndexOutOfBoundsException: length = 30; regionStart = 24; regionLength = -25 в этой строке: String newTemp = newString.substring (newString.indexOf ('v'), newString.indexOf ('[')). trim(); – Simon

+0

@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(); ' – Swamy