challenge 擬似lsの実装

スラッシュで区切られた文字列の配列(以下パスリスト)がある。
このパスリストにたいして擬似的なlsを行いたい。
lsはパスリストと表示対象ディレクトリのパスを入力する。

例としては以下のようになる。
pathList = ["aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee"]

ls(pathList,"aaa/")
>["bbb","ccc","ddd/"]

ls(pathList,"aaa/ddd/")
>["eee"]

なおパスリストが大きくなったとき、速度がなるべく低下しないように実装するのが望ましい。
文字列は任意の文字コードであると仮定してかまわない。

Posted feedbacks - Java

素朴に。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
public class Ls {
    public static List<String> ls(String[] pathList, String path) {
        List<String> ret = new ArrayList<String>();
        for (String p : pathList) {
            if (p.startsWith(path)) {
                int n = p.lastIndexOf("/");
                n = n == path.length() - 1 ? p.length() : n + 1;
                ret.add(p.substring(path.length(), n));
            }
        }
        return ret;
    }

    public static void main(String[] args) {
        String[] pathList = new String[] { "aaa/bbb","aaa/ccc","aaa/ddd/eee","bbb/ddd/eee" };
        for (String path : ls(pathList, "aaa/")) {
            System.out.println(path);
        }
        for (String path : ls(pathList, "aaa/ddd/")) {
            System.out.println(path);
        }
    }
}

Index

Feed

Other

Link

Pathtraq

loading...