我有这个字符串
227305593149516.jpg;221563849532915.3gp;
我将每个文件名拆分为;你可以看到charecter。我在我的活动中使用这个代码使它们分开:
mystring="227305593149516.jpg;221563849532915.3gp;";
StringTokenizer tokenizer = new StringTokenizer(mystring, ";");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if(!token.contains(".3gp")){//aks bud
imges[cimage]=token;
cimage++;
}else{//film bud
if(cvide==1)
video1=token;
else
video2=token;
cvide++;
}
}
这很奇怪,我在模拟器和其他2个设备上运行此代码,它可以找到,但我在另一部手机上运行相同的应用程序并且它崩溃了,这是日志:
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.arousshow.persiandesigners.AddDetails$GetContacts.onPostExecute(AddDetails.java:160)
at com.arousshow.persiandesigners.AddDetails$GetContacts.onPostExecute(AddDetails.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)
这是使应用程序崩溃的行(AddDetails.java:160):
if(!token.contains(".3gp")){
型号手机是PHONE_MODEL = GT-I9300和ANDROID_VERSION = 4.1.2。
你可以帮帮我吗? 谢谢答案 0 :(得分:1)
我目前没有安装Android SDK,但在Java 8中,这对我有用:
public static void main(String[] args) {
String mystring = "227305593149516.jpg;221563849532915.3gp;";
StringTokenizer tokenizer = new StringTokenizer(mystring, ";");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (!token.contains(".3gp")) {
System.out.println(token + " has 3gp");
} else {
System.out.println(token + " does not have 3gp");
}
}
}
"227305593149516.jpg has 3gp"
"221563849532915.3gp does not have 3gp"
我怀疑Android可能会在最后一个';'之后添加一个额外的令牌,其中包含一个空字符串。是否像这样添加一个空字符串检查来处理indexArray问题?
if (!token.isEmpty() && !token.contains(".3gp")) {
根据android文档,无论如何你应该使用split。 StringTokenizer:“将字符串分解为标记;新代码应该使用split(String)。”
另一方面,您可以更正确地检查令牌'endsWith'是否与您关注的后缀。 String::EndsWith