我有这个字符串
227305593149516.jpg;221563849532915.3gp;
我用 ; 分割每个文件名正如您所看到的那样。我在我的 Activity 中使用这段代码将它们分开:
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 。
你能帮帮我吗? 谢谢
最佳答案
我目前没有设置 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)。”
另一方面,您可以更正确地检查 token “endsWith”是否是您关心的后缀。 String::EndsWith
关于android - ArrayIndexOutOfBoundsException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565572/