【发布时间】: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