1

我有一个数据阅读器,它通过给定的分隔符对输入字符串进行标记。标记转到 ArrayList,分隔符转到另一个。例如:

this + is - an * input

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

如何进行这种索引,以便当我有一个标记索引“i”时,我可以轻松地从索引“i+1”获取分隔符,而无需遍历所有分隔符?

4

3 回答 3

1

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

于 2013-02-26T13:34:30.103 回答
0

Based on your comment to my other answer

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

with the following outputs

[ an ,  input,  is , this ]
[+, -, *, ]
于 2013-02-26T16:12:04.107 回答
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 
+
于 2013-02-26T15:18:45.600 回答