我正在尝试拆分以下字符串:
1396*43
23*
56*
122*37*87
所有这些都存储在一个数组中。以下是我的代码的一部分:
for(int i=0;i<array.length;i++)
{
String[] tokens = array[i].split("\\*");
System.out.println(tokens[1]);
}
它只打印存储在第一个索引中的“43”而不是“37”存储在最后一个索引中。
答案 0 :(得分:1)
你得到一个IndexOutOfBoundsException,因为你试图在第二行获得令牌[1](令牌的长度为1)。
以这种方式更改您的代码:
for(int i=0;i<array.length;i++) {
String[] tokens = array[i].split("\\*");
if (tokens.length > 1) {
System.out.println(tokens[1]);
}
}
答案 1 :(得分:0)
使用spilled时,请确保首先使用令牌值。即便没有,处理它。
public class TestMain {
public static void main(String[] args) {
String array[]=new String[200];
array[0]="1396*43";
array[1]="23*";
array[2]="56*";
array[3]="122*37*87";
for(int i=0;i<array.length;i++)
{
if(null!=array && null!= array[i] && null!=array[i].split("\\*")){
String[] tokens = array[i].split("\\*");
if (tokens.length > 1) {
System.out.println(tokens[1]);
}
}
}
}
}
答案 2 :(得分:0)
Java8和流的解决方案:
String[] words = {"1396*43",
"23*",
"56*",
"122*37*87"};
List<String> numbers = Arrays.stream(words)
.map(word -> word.split("\\*"))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
numbers.forEach(System.out::println);