1

私は .obj ファイルを持っています。これまでのところ、乱雑なトークナイザーを使用して行を分割してきました。これは非常に非効率的であることがわかりました。

public static String getSpecificToken(String s, int t) {
    Scanner tokens = new Scanner(s);
    String token = "";
    
    for (int i = 0; i < t; i++) {
        if(!tokens.hasNext()) { break; }
        token = tokens.next();
    }
    
    tokens.close();
    return token;
}

オブジェクト ファイルのフォーマットは次のようになります。これを分割する最も効率的な方法を見つけるのに苦労しています。

v 1.4870 0.3736 2.2576

v 1.5803 0.3451 2.1859

v 1.6275 0.3111 2.2261

v 1.6343 0.0783 2.4352

v 1.5180 0.0644 2.5398

v 1.4568 0.0720 2.5205

v 1.3953 0.0795 2.5013

4

2 に答える 2

3

スペースで使用String#splitするだけで、ここで使用する必要はありません。実際には、可能な限り使用を避ける必要があります: -splitTokenizerTokenizer

Scanner tokens = new Scanner(s);
String[] tokenArr = tokens.split("\\s+");  // Split on 1 or more space

for (String token: tokenArr) {
    System.out.println(token);
}
于 2012-10-13T08:52:55.650 に答える
3

このはと比較java.util.Scannerしてjava.io.StreamTokenizer、後者のわずかな優位性を示唆しています。同様のアプローチを使用して、ユース ケースをプロファイリングできる場合があります。

于 2012-10-13T09:10:03.957 に答える