使用两个数组之间的相同索引来获取相关信息?

时间:2013-02-26 13:25:20

标签: java arrays

我有一个数据读取器,通过给定的分隔符来标记输入字符串。令牌转到ArrayList,分隔符转到另一个。例如:

this + is - an * input

这句话将被标记化,以便“this”,“is”,“an”和“input”将转到令牌数组,而“+”,“ - ”和“*”转到分隔符数组。现在,我需要存储这些的原始索引,以便令牌将具有索引0,2,4和6,并且分隔符将具有索引1,3和5.正常的解决方案是将它们放入相同的数组,但出于性能原因,我需要将它们分开(例如,快速检查分隔符)。

如何进行索引以便当我有一个令牌索引'i'时,我可以轻松地从索引'i + 1'获取deliminator而不循环遍历所有分隔符?

3 个答案:

答案 0 :(得分:1)

我建议使用TreeMap,将索引作为键,将分隔符作为值。它甚至有containsValue()方法,我认为它可能对你有用。

答案 1 :(得分:0)

尝试将此帖子作为对@Pescis答案的评论,但无法将其格式化。

public class Split {

    public static void main(String[] args) {

        String in = "this + is - an * input";

        StringTokenizer stringTokenizer = new StringTokenizer(in, "+-*", true);
        Map<Integer, String> map = new TreeMap<Integer, String>();

        int x = stringTokenizer.countTokens();

        for (int i = 0; i < x; i++) {
            map.put(i, stringTokenizer.nextToken());
        }

        System.out.println(map);
        System.out.println(map.get(0));
        System.out.println(map.get(1));
    }
}

输出

{0=this , 1=+, 2= is , 3=-, 4= an , 5=*, 6= input}
this 
+

答案 2 :(得分:0)

根据您对我的其他答案的评论

import com.google.common.collect.Table;
import com.google.common.collect.TreeBasedTable;
public static void main(String[] args) {
            String in = "this + is - an * input";
            Table<Integer, String, String> table = TreeBasedTable.create();
            StringTokenizer stringTokenizer = new StringTokenizer(in, "+-*", true);

            int x = stringTokenizer.countTokens();

            for (int i = 0; i < x / 2; i++) {
                table.put(i, stringTokenizer.nextToken(),
                        stringTokenizer.nextToken());

            }
            if (stringTokenizer.hasMoreElements()) {
                table.put(x, stringTokenizer.nextToken(), "");
            }

            // iterate through tokens
            System.out.println(table.columnKeySet());
            // iterate thruogh delims
            System.out.println(table.values());
        }

具有以下输出

[ an ,  input,  is , this ]
[+, -, *, ]