-2

ここで私はこのタイプの文字列を持っており、この文字列をすべての要素に分割し、数値用に1つのarraylist(integer)または1つの整数配列を作成したいと考えています。

私は例としてこのような文字列を持っています:123|00,124|01,125|00,126|01

最初に、以下を含む1つのリスト内のすべての要素を分離したい

123|00
124|01
125|00
126|01

そして、私が持っている1つの整数配列リストまたは整数配列を作りたい後

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

更新:-

|とで区切られた一貫性のない値がある場合は,、それらを別々に分割する必要があります。-

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()関数には、特に1文字の「ファストパス」から離れた場所で多くの処理が行われます。これは、「自家製」アプローチと「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

または、try catchを使用して、さらにいくつかのチェックを行います。

    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 に答える