如何在java中将字符串拆分为int数组

时间:2012-10-17 17:49:03

标签: java android

这里我有这种类型的String,我想将这个字符串拆分到每个元素,并希望为数字创建一个arraylist(整数)或一个整数数组。

我有一个像这样的字符串作为示例:123|00,124|01,125|00,126|01

我想先在一个包含

的列表中分隔所有元素
123|00
124|01
125|00
126|01

之后我想创建一个只有

的整数数组列表或整数数组
123
124
125
126

请任何人都可以建议我如何做到这一点

由于

代码:

            List<Integer> numberList = new ArrayList<Integer>();
        HashMap<Integer, Integer> statusMap = new HashMap<Integer, Integer>();
        for (String tripnumber : tripNumbers) {

            int number = Integer.parseInt(tripnumber.split("[|]")[0]);
            Logger.d(TAG, "Trip number in Status Message = "+number);

            int flag = Integer.parseInt(tripnumber.split("[|]")[1]);
            Logger.d(TAG, "TM flag = "+flag);

            if (number > 0) {
                statusMap.put(number, flag);
                numberList.add(number);
            }
        }

3 个答案:

答案 0 :(得分:7)

String str = "123|00,124|01,125|00,126|01";

// Split on `|` or `,` and then take every alternate element.
String[] tokens = str.split("[|,]");

List<Integer> intList = new ArrayList<Integer>();    
for (int i = 0; i < tokens.length; i = i + 2) {
    intList.add(Integer.parseInt(tokens[i]));
}

更新: -

如果您有以|,分隔的不一致值,则需要单独拆分: -

String str = "123|00,125|,126|01,|,";
String[] tokens = str.split(",");
Map<Integer, String> flagMap = new HashMap<Integer, String>();

    for (String token: tokens) {
        String[] arr = token.split("[|]");

        if (arr.length == 0) {
            continue;
        }
        if (arr[0].length() > 1) {
            if (arr.length == 2) {
                flagMap.put(Integer.parseInt(arr[0]), arr[1]);
            } else {
                flagMap.put(Integer.parseInt(arr[0]), "");
            }
        }
    }

    System.out.println(flagMap);

输出: -

{126=01, 125=, 123=00}

答案 1 :(得分:0)

这个怎么样:

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String [] args) throws Exception
    {

        String input = "123|00,124|01,125|00,126|01";

        List<Integer> out = new ArrayList<Integer>();

        String [] s = input.split(",");     

        for(String i : s) {
            int x = i.indexOf("|");
            out.add(Integer.parseInt(i.substring(0,x)));
        }

    }

}

String.split()函数中有很多处理,特别是在单个字符的“快速路径”之外。这是一个简单的比较,以说明“本土”方法和“String.split”之间的性能差异。

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Main
{
    public static void main(String [] args) throws Exception
    {

        String str = "123|00,124|01,125|00,126|01";

        Date before = new Date();

        for(int x=0;x<10000000;++x) {

            /*

            // Split on `|` or `,` and then take every alternate element.
            String[] tokens = str.split("[|,]");

            List<Integer> intList = new ArrayList<Integer>();    
            for (int i = 0; i < tokens.length; i = i + 2) {
                intList.add(Integer.parseInt(tokens[i]));
            }

            */

            List<Integer> out = new ArrayList<Integer>();

                String [] s = str.split(",");     

            for(String i : s) {
                int y = i.indexOf("|");
                out.add(Integer.parseInt(i.substring(0,y)));
            }

        }

        Date after = new Date();

        System.out.println(after.getTime() - before.getTime());

    }

}

在我的电脑上,“拆分”测试需要6354ms,而“本土”需要2341ms。 “拆分”更容易编码,理解和维护。但“本土化”的速度提高了37%。

开发人员应该意识到split是一个专为复杂表达式设计的正则表达式处理器。对于简单情况,您可以选择更快的解决方案。了解权衡非常重要。

答案 2 :(得分:0)

或者尝试捕获,还有一些检查......

    String s = "123|00,124|01,125|00,126|01";
    String[] parts = s.split(",");

    //The list of Strings the guy wanted
    ArrayList<String> listParst = new ArrayList<String>(Arrays.asList(parts));

    //The list of ints the guy wanted       
    ArrayList<Integer> listInt = new ArrayList<Integer>();

    for(String is: listParst){
        try {
            String[] t = is.split("|");
            if(t.length > 0){
                int i = Integer.parseInt(t[0]);
                listInt.add(i);
            }
        } catch(NumberFormatException e){

        }
    }