-2

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

我有这样的字符串作为示例: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);
            }
        }
4

3 回答 3

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]));
}

更新: -

如果用|and分隔的值不一致,,则需要分别对它们进行拆分:-

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}
于 2012-10-17T17:51:43.173 回答
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());

    }

}

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

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

于 2012-10-17T17:55:22.493 回答
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){

        }
    }
于 2012-10-17T17:57:11.837 回答