字符串分为两个列表

时间:2016-02-22 15:37:49

标签: java string split

我想分割一条可能如下所示的行:

6:8.0 7:36.0 14:9.0 15:31.0 22:5.0 23:21.0 30:2.0 31:12.0 38:40.0 39:137.0 46:50.0 47:133.0 54:35.0 55:106.0 62:16.0

第一个值是x第二个y。 现在我希望得到两个列表ListX<Integer>ListY<Double>

我试过用char做char。在哪里可以搜索&#39;:&#39;然后回到前面来获取号码。但必须有一个更快的方法。特别是关于能够变得非常大的弦的长度。你有什么主意吗? 感谢

3 个答案:

答案 0 :(得分:3)

您可以尝试使用String.split()

String test = "6:8.0 7:36.0 14:9.0 15:31.0 22:5.0 23:21.0 30:2.0 31:12.0 38:40.0 39:137.0 46:50.0 47:133.0 54:35.0 55:106.0 62:16.0";

String[] splitString1 = test.split(" ");
String[] splitString2 = null;

for(String a : splitString1)
{
    splitString2 = a.split(":");
    System.out.println(splitString2[0]);
    System.out.println(splitString2[1]);
    //push splitString2[0] to x
    //push splitString2[1] to y
}

答案 1 :(得分:0)

这是完成您正在考虑的事情的完整代码

import java.util.*;

public class IntegerDoubleExtractor{

     public static void main(String []args){
        String test = "6:8.0 7:36.0 14:9.0 15:31.0 22:5.0 23:21.0 30:2.0 31:12.0 38:40.0 39:137.0 46:50.0 47:133.0 54:35.0 55:106.0 62:16.0";

        List<Integer> x = new ArrayList<Integer>();
        List<Double> y = new ArrayList<Double>();

        for(String xy : test.split(" ")) {
            String xys[] = xy.split(":");
            x.add(Integer.parseInt(xys[0]));
            y.add(Double.parseDouble(xys[1]));
        }
        System.out.println(x);
        System.out.println(y);
     }

}

答案 2 :(得分:0)

您也可以使用Scanner,在此过程中不需要中间字符串或数组:

Scanner scanner = new Scanner(str);
scanner.useDelimiter(Pattern.compile("[:\\s]"));
while (scanner.hasNext()) {
    listX.add(scanner.nextInt());
    listY.add(scanner.nextDouble());
}