1

検索しましたが、質問が見つかりません。Linux 出力 ls -l でファイルを保存しました。内容は次のとおりです。

drwxr-xr-x  2 usr usr 4096 Jan 20 17:49 file1
drwxrwxr-x  4 usr usr 4096 Jan 20 18:00 file2
drwx------  2 usr usr 4096 Feb  3 08:48 catalog1

そして、たとえば、時間のある8列目だけを残し、残りを切り取りたいと思います。私は何をすべきか?私はJavaとプログラミングの初心者です。

4

2 に答える 2

1

正規表現を使用してタイムスタンプを照合できます (時間のような値が他のフィールドに表示されないことが保証されているため)。何かのようなもの:

// Populate this with the output of the ls -l command
String input;

// Create a regular expression pattern to match.
Pattern pattern = Pattern.compile("\\d{2}:\\d{2}");

// Create a matcher for this pattern on the input string.
Matcher matcher = pattern.matcher(input);

// Try to find instances of the given regular expression in the input string.    
while (matcher.find()){
  System.out.println(matcher.group());
}

任意の列を取得するには、取得しようとしている列の正規表現を記述するか、各行をスペース文字で分割してからインデックスで選択することを選択できます。たとえば、すべてのファイルサイズを取得するには:

String input;

String[] inputLines = input.split("\n");
for (String inputLine : inputLines) {
  String[] columns = inputLine.split(" ");
  System.out.println(columns[4]); // Where 4 indicates the filesize column
}
于 2013-02-19T20:44:28.750 に答える
0

探している正確な情報を抽出するには、StringTokenizerを使用する必要があります。次のコードを試してください。

String value =  "drwxr-xr-x  2 usr usr 4096 Jan 20 17:49 file1\n"+
                "drwxrwxr-x  4 usr usr 4096 Jan 20 18:00 file2\n"+
                "drwx------  2 usr usr 4096 Feb  3 08:48 catalog1";
StringBuffer sBuffer = new StringBuffer(10);
StringTokenizer sTokenizer = new StringTokenizer(value,"\n");
while (sTokenizer.hasMoreTokens())
{
    String sValue = sTokenizer.nextToken();
    StringTokenizer sToken = new StringTokenizer(sValue," ");
    int counter = 0;
    while (sToken.hasMoreTokens())
    {
        String token = sToken.nextToken();
        counter++;
        if (counter == 8)//8 is the column that you want to leave.
        {
            sBuffer.append(token+"\n");
            break;
        }
    }           
}
System.out.println(sBuffer.toString());
于 2013-02-19T21:44:03.160 に答える