1

指定された区切り記号で入力文字列をトークン化するデータ リーダーがあります。トークンは ArrayList に移動し、区切り文字は別の ArrayList に移動します。例えば:

this + is - an * input

この文は、「this」、「is」、「an」、および「input」がトークン配列に移動し、「+」、「-」、および「*」が delimiters 配列に移動するようにトークン化されます。ここで、トークンのインデックスが 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 に答える