2016-04-12 8 views
1

私はテキストファイルを読み込み、そこから特定のデータを取得する簡単なプログラムを作ろうとしています。下のコードでは、私は引用符を持っている位置を取得しようとします。それでは、file.txtをコンテンツであるとしよう。スキャナとサブストリング

aaaaaaa"bbbbb"ccccc 
ddd"ee"ffff 
g"hhhhhh"iii"gggg" 

ので、私は(AL = [7、13、3、6、1、8、12、17])引用符のすべての位置での配列リストを有するべきです。 問題は、テキストから読み込んだ各行から部分文字列を取得できないようです。引用符の中にあるテキストを取得したい。上記示唆したように、あなたが正規表現を用いて微細である場合、あなたはこの(同じラインで開閉引用符を想定して行うことができ

File temp = new File("file.txt"); 
Scanner file = new Scanner(temp); 
ArrayList<Integer> al = new ArrayList<Integer>(); 
while (file.hasNext()) { 
    String k = file.next(); 
    //System.out.println(k); 
    int position = 0; 
    while (position >= 0) { 
     position = k.indexOf('"', position + 1); 
     //System.out.println(position); 
     al.add(position); 
    } 
    System.out.println(k.substring(position,position+1)); 
} 
+0

あなたのプログラムは何を得ていますか?何が問題なのですか? –

+1

引用符の中に文字列を入れたい場合は、正規表現 – Jens

+0

を 'Pattern'と' Matcher'を使ってRegexにすると、文字列に2つ以上の引用符がある場合に便利です。ここで正規表現を使用しない理由は何ですか? – TheLostMind

答えて

0

bbbbb 
ee 
hhhhhh 
gggg 

コード:出力は次のようなものでなければなりません):

List<String> lines = Files.lines(Paths.get("files/input.txt")).collect(Collectors.toList()); 
    Pattern p = Pattern.compile("\"(.*?)\""); 
    for(String line : lines){ 
     Matcher m = p.matcher(line); 
     while(m.find()) 
      System.out.println(m.group(1).replaceAll("\"", "")); 
    } 

私はそれが役に立ちそうです。