我正在开发android。我有一个像下面的字符串。
String str = "@test1|test2|test3@test4|test5|test6|test7@test8|test9|test10|test11@test12|test13|test14|test15@......"
我使用String[] str1 = str.split("[@]");
将上面的字符串与“@”分开
所以最终的结果是
str1 [0] = test1 | test2 | test3
str1 [1] = test4 | test5 | test6 | test7
...
我使用的代码段
for (int x = 1; x < str1.length; x++) {
String[] st1 = str1 [x].trim().split("\\|");
System.out.println("first" + st1[0].trim());
System.out.println("second" + st1[1].trim());
System.out.println("third" + st1[2].trim());
System.out.println("fourth" + st1[3].trim());
List1.add(st1[0].trim());
List2.add(st1[1].trim());
List3.add(st1[2].trim());
List4.add(st1[3].trim());
}
在上面的for循环中,当循环从x = 2开始时,它工作正常。但是如果我给x = 1那么它就是抛出数组 在“System.out.println(”4th“+ st1 [3] .trim());”中索引越界异常。是因为str1 [0]仅由3个项目组成,而剩余的由4个项目组成。所以现在我用“|”分割后无法得到第四个值。请告诉我如何获得第四个值。提前谢谢。
答案 0 :(得分:3)
ArrayIndexOutOFBound即将推出,因为您可以通过以下两种方式访问您可以获得的第四个值,
String[] str1 = str.split("@");
for (int x = 1; x < str1.length; x++) {
String[] st1 = str1[x].trim().split("\\|");
for (int j = 0; j < st1.length; j++) {
System.out.println(st1[j]);
}
}
或
String[] str1 = str.split("@");
for (int x = 1; x < str1.length; x++) {
String[] st1 = str1[x].trim().split("\\|");
/*for (int j = 0; j < st1.length; j++) {
System.out.println(st1[j]);
}*/
if(st1.length> 0 )
System.out.println("first" + st1[0].trim());
if(st1.length> 1 )
System.out.println("second" + st1[1].trim());
if(st1.length> 2 )
System.out.println("third" + st1[2].trim());
if(st1.length> 3 )
System.out.println("fourth" + st1[3].trim());
}
答案 1 :(得分:0)
你的字符串中有@
我在任何地方都看不到[@]
,所以为什么要用这个标记拆分字符串。
更改
String[] str1 = str.split("[@]")
到
String[] str1 = str.split("@")
解决indexOutOfBounds:
for (int x = 1; x < str1.length; x++) {
String[] st1 = str1 [x].trim().split("\\|");
for (int j = 0; j < st1.length; j++)
{
System.out.println( j "= " + st1[j].trim());
}
}
答案 2 :(得分:0)
for (int x = 1; x < str1.length; x++) {
String[] st1 = str1 [x].trim().split("\\|");
System.out.println("first" + st1[0].trim());
System.out.println("second" + st1[1].trim());
System.out.println("third" + st1[2].trim());
System.out.println("fourth" + st1[3].trim());
}
更改为:
for (int x = 0; x < str1.length; x++) {
String[] st1 = str1 [x].trim().split("\\|");
for (int y = 0; y < st1.length; y++)
{
System.out.println("value at "+String.ValueOf(y)+": " + st1[y].trim());
}
}
答案 3 :(得分:0)
String str = "@test1|test2|test3@test4|test5|test6|test7@test8|test9|test10|test11@test12|test13|test14|test15@";
String[] str1 = str.split("[@]");
for (int x = 0; x < str1.length; x++) {
String[] str2 = str1[x].trim().split("\\|");
for (int y = 0; y < str2.length; y++) {
System.out.println(str2[y].trim());
}
}
输出:
test1
test2
test3
test4
test5
test6
test7
test8
test9
test10
test11
test12
test13
test14
test15
希望这会对你有所帮助。
答案 4 :(得分:0)
你有IndexOutOfBoundException,因为第一个子字符串(str1 [0])只有3个项目,你试图访问第4个项目。此代码段应该可以使用。
String[] str1 = str.split( "[@]" );
List<String> list = new ArrayList<String>();
for ( int x = 1; x < str1.length; x++ )
{
String[] st1 = str1[ x ].trim().split( "\\|" );
for ( int index = 0; index < st1.length; index++ )
{
String value = st1[ index ].trim();
System.out.println( "value in index " + index + "=" + value );
list.add( value );
}
}