2017-01-10 5 views
0

私はのバージョンチェッカーを私のアプリケーション用に作成しようとしています。 2つの文字列の数字を比較し、1つの数字セットが大きい場合は新しいバージョンが見つかったと考えています。私は必要なもの文字列内の数字のセットを比較してください

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

は、ファイルの前の数字(360)が存在することができるよう、上記の例のように、両方の文字列で「V」後セット番号を比較することです。方法以下

新たに受信したアイテムcheckItemTrack)againsチェックするファイルが含まれていArrayListのloadTrackedItems)をチェックします。

しかし、正しい番号を取得するのに問題があります。 これを行うには良い方法はありますか?誰かがとても親切で少し助けてくれますか?

ありがとうございます。

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(ビルド12) – Simon

+0

String [] separated = string.splitのような文字列を分割しようとすることができます( ""); date = separated [0]; ist_time = separated [1]; 2つの文字列の分離された値を比較してください.... –

答えて

0

このソリューションを比較するには2つの文字列しか受け取らない場合は、このソリューションを試してみてください。

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 文字列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