字符串在java中拆分

时间:2015-03-09 19:38:47

标签: java

我正在尝试拆分以下字符串:

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”存储在最后一个索引中。

3 个答案:

答案 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);